@subwallet/extension-base 1.0.2-1b → 1.0.2-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.
Files changed (122) hide show
  1. package/background/KoniTypes.d.ts +34 -16
  2. package/background/KoniTypes.js +7 -6
  3. package/background/errors/TransactionError.js +1 -21
  4. package/cjs/background/KoniTypes.js +7 -6
  5. package/cjs/background/errors/TransactionError.js +0 -20
  6. package/cjs/constants/index.js +26 -8
  7. package/cjs/koni/api/dotsama/balance.js +224 -49
  8. package/cjs/koni/api/dotsama/transfer.js +29 -30
  9. package/cjs/koni/api/nft/acala_nft/index.js +1 -4
  10. package/cjs/koni/api/nft/bit.country/index.js +1 -4
  11. package/cjs/koni/api/nft/evm_nft/index.js +3 -7
  12. package/cjs/koni/api/nft/index.js +6 -3
  13. package/cjs/koni/api/nft/karura_nft/index.js +1 -4
  14. package/cjs/koni/api/nft/rmrk_nft/index.js +1 -8
  15. package/cjs/koni/api/nft/statemine_nft/index.js +1 -4
  16. package/cjs/koni/api/nft/unique_nft/index.js +1 -6
  17. package/cjs/koni/api/nft/wasm_nft/index.js +111 -169
  18. package/cjs/koni/api/nft/wasm_nft/utils.js +7 -11
  19. package/cjs/koni/api/staking/bonding/amplitude.js +9 -13
  20. package/cjs/koni/api/staking/bonding/astar.js +13 -15
  21. package/cjs/koni/api/staking/bonding/index.js +10 -22
  22. package/cjs/koni/api/staking/bonding/paraChain.js +2 -85
  23. package/cjs/koni/api/staking/bonding/relayChain.js +16 -119
  24. package/cjs/koni/api/staking/bonding/utils.js +8 -27
  25. package/cjs/koni/api/tokens/wasm/index.js +4 -5
  26. package/cjs/koni/api/xcm/polkadotXcm.js +1 -1
  27. package/cjs/koni/api/xcm/utils.js +13 -18
  28. package/cjs/koni/api/xcm/xTokens.js +1 -1
  29. package/cjs/koni/api/xcm/xcmPallet.js +6 -9
  30. package/cjs/koni/background/cron.js +47 -150
  31. package/cjs/koni/background/handlers/Extension.js +64 -106
  32. package/cjs/koni/background/handlers/State.js +21 -19
  33. package/cjs/koni/background/handlers/Tabs.js +1 -8
  34. package/cjs/koni/background/subscription.js +29 -32
  35. package/cjs/packageInfo.js +1 -1
  36. package/cjs/services/chain-service/handler/SubstrateChainHandler.js +8 -13
  37. package/cjs/services/chain-service/handler/light-client/index.js +0 -2
  38. package/cjs/services/chain-service/index.js +7 -6
  39. package/cjs/services/event-service/index.js +1 -5
  40. package/cjs/services/event-service/types.js +1 -11
  41. package/cjs/services/history-service/index.js +10 -16
  42. package/cjs/services/history-service/subsquid-multi-chain-history.js +9 -12
  43. package/cjs/services/price-service/coingecko.js +1 -0
  44. package/cjs/services/price-service/index.js +3 -2
  45. package/cjs/services/request-service/handler/AuthRequestHandler.js +2 -6
  46. package/cjs/services/storage-service/DatabaseService.js +33 -52
  47. package/cjs/services/storage-service/db-stores/Nft.js +17 -4
  48. package/cjs/services/transaction-service/event-parser/index.js +48 -20
  49. package/cjs/services/transaction-service/index.js +14 -23
  50. package/cjs/utils/index.js +14 -7
  51. package/constants/index.d.ts +13 -7
  52. package/constants/index.js +13 -7
  53. package/koni/api/dotsama/balance.d.ts +1 -0
  54. package/koni/api/dotsama/balance.js +197 -22
  55. package/koni/api/dotsama/transfer.js +4 -5
  56. package/koni/api/nft/acala_nft/index.js +1 -3
  57. package/koni/api/nft/bit.country/index.js +1 -3
  58. package/koni/api/nft/evm_nft/index.js +3 -6
  59. package/koni/api/nft/index.d.ts +2 -1
  60. package/koni/api/nft/index.js +6 -3
  61. package/koni/api/nft/karura_nft/index.js +1 -3
  62. package/koni/api/nft/nft.d.ts +0 -1
  63. package/koni/api/nft/rmrk_nft/index.js +1 -8
  64. package/koni/api/nft/statemine_nft/index.js +1 -3
  65. package/koni/api/nft/unique_nft/index.js +1 -5
  66. package/koni/api/nft/wasm_nft/index.d.ts +2 -0
  67. package/koni/api/nft/wasm_nft/index.js +109 -167
  68. package/koni/api/nft/wasm_nft/utils.d.ts +5 -7
  69. package/koni/api/nft/wasm_nft/utils.js +5 -7
  70. package/koni/api/staking/bonding/amplitude.d.ts +1 -0
  71. package/koni/api/staking/bonding/amplitude.js +10 -15
  72. package/koni/api/staking/bonding/astar.js +6 -8
  73. package/koni/api/staking/bonding/index.d.ts +1 -4
  74. package/koni/api/staking/bonding/index.js +13 -23
  75. package/koni/api/staking/bonding/paraChain.d.ts +0 -3
  76. package/koni/api/staking/bonding/paraChain.js +5 -86
  77. package/koni/api/staking/bonding/relayChain.d.ts +1 -5
  78. package/koni/api/staking/bonding/relayChain.js +18 -118
  79. package/koni/api/staking/bonding/utils.d.ts +2 -3
  80. package/koni/api/staking/bonding/utils.js +9 -27
  81. package/koni/api/tokens/wasm/index.js +4 -5
  82. package/koni/api/xcm/polkadotXcm.js +2 -2
  83. package/koni/api/xcm/utils.d.ts +6 -5
  84. package/koni/api/xcm/utils.js +10 -15
  85. package/koni/api/xcm/xTokens.js +2 -2
  86. package/koni/api/xcm/xcmPallet.js +9 -10
  87. package/koni/background/cron.d.ts +1 -6
  88. package/koni/background/cron.js +48 -151
  89. package/koni/background/handlers/Extension.d.ts +2 -2
  90. package/koni/background/handlers/Extension.js +67 -108
  91. package/koni/background/handlers/State.d.ts +6 -5
  92. package/koni/background/handlers/State.js +21 -19
  93. package/koni/background/handlers/Tabs.js +1 -8
  94. package/koni/background/subscription.js +30 -31
  95. package/package.json +8 -13
  96. package/packageInfo.js +1 -1
  97. package/services/chain-service/handler/SubstrateChainHandler.js +9 -14
  98. package/services/chain-service/handler/light-client/index.d.ts +1 -17
  99. package/services/chain-service/handler/light-client/index.js +1 -1
  100. package/services/chain-service/helper/psp22_abi.json +881 -1041
  101. package/services/chain-service/helper/psp34_abi.json +1808 -2964
  102. package/services/chain-service/index.js +7 -6
  103. package/services/event-service/index.js +1 -5
  104. package/services/event-service/types.d.ts +9 -5
  105. package/services/event-service/types.js +1 -4
  106. package/services/history-service/index.d.ts +1 -1
  107. package/services/history-service/index.js +10 -16
  108. package/services/history-service/subsquid-multi-chain-history.js +11 -15
  109. package/services/price-service/coingecko.js +1 -0
  110. package/services/price-service/index.js +3 -2
  111. package/services/request-service/handler/AuthRequestHandler.js +2 -6
  112. package/services/storage-service/DatabaseService.d.ts +0 -1
  113. package/services/storage-service/DatabaseService.js +33 -52
  114. package/services/storage-service/db-stores/Nft.d.ts +2 -1
  115. package/services/storage-service/db-stores/Nft.js +16 -4
  116. package/services/transaction-service/event-parser/index.js +49 -21
  117. package/services/transaction-service/index.js +14 -23
  118. package/utils/index.d.ts +1 -1
  119. package/utils/index.js +12 -6
  120. package/cjs/koni/api/tokens/wasm/utils.js +0 -63
  121. package/koni/api/tokens/wasm/utils.d.ts +0 -6
  122. package/koni/api/tokens/wasm/utils.js +0 -54
@@ -286,7 +286,7 @@ class ChainService {
286
286
  this.dbService.removeFromChainStore([slug]).catch(console.error);
287
287
  this.updateChainSubscription();
288
288
  this.lockChainInfoMap = false;
289
- this.eventService.emit('chain.updateState', slug);
289
+ this.eventService.emit('chain.remove', slug);
290
290
  return true;
291
291
  }
292
292
  resetChainInfoMap(excludedChains) {
@@ -352,7 +352,7 @@ class ChainService {
352
352
  this.dbService.removeFromAssetStore(targetAssets).catch(e => this.logger.error(e));
353
353
  this.assetRegistrySubject.next(assetRegistry);
354
354
  targetAssets.forEach(assetSlug => {
355
- this.eventService.emit('asset.updateState', assetSlug);
355
+ this.eventService.emit('asset.remove', assetSlug);
356
356
  });
357
357
  }
358
358
 
@@ -426,7 +426,7 @@ class ChainService {
426
426
  currentProvider: chainStateMap[chainSlug].currentProvider
427
427
  }).catch(console.error);
428
428
  this.lockChainInfoMap = false;
429
- this.eventService.emit('chain.updateState', chainSlug);
429
+ this.eventService.emit('chain.enable', chainSlug);
430
430
  return true;
431
431
  }
432
432
  enableChain(chainSlug) {
@@ -461,7 +461,7 @@ class ChainService {
461
461
  }).catch(console.error);
462
462
  this.updateChainStateMapSubscription();
463
463
  this.lockChainInfoMap = false;
464
- this.eventService.emit('chain.updateState', chainSlug);
464
+ this.eventService.emit('chain.disable', chainSlug);
465
465
  return true;
466
466
  }
467
467
  checkExistedPredefinedChain(genesisHash, evmChainId) {
@@ -685,7 +685,7 @@ class ChainService {
685
685
  active: targetChainState.active,
686
686
  currentProvider: targetChainState.currentProvider
687
687
  }).then(() => {
688
- this.eventService.emit('chain.updateState', chainSlug);
688
+ this.eventService.emit('chain.update', chainSlug);
689
689
  }).catch(e => this.logger.error(e));
690
690
  }
691
691
  insertChain(params) {
@@ -1120,6 +1120,7 @@ class ChainService {
1120
1120
  this.setAssetSettings(assetSettings, false);
1121
1121
  }
1122
1122
  this.eventService.emit('asset.ready', true);
1123
+ console.log('Done init asset settings');
1123
1124
  }
1124
1125
  setAssetSettings(assetSettings) {
1125
1126
  let emitEvent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
@@ -1134,7 +1135,7 @@ class ChainService {
1134
1135
  }
1135
1136
  this.assetSettingSubject.next(assetSettings);
1136
1137
  updateAssets.forEach(slug => {
1137
- this.eventService.emit('asset.updateState', slug);
1138
+ this.eventService.emit(assetSettings[slug].visible ? 'asset.enable' : 'asset.disable', slug);
1138
1139
  });
1139
1140
  this.store.set('AssetSetting', assetSettings);
1140
1141
  }
@@ -42,11 +42,7 @@ class EventService extends _eventemitter.default {
42
42
  }, this.lazyTime);
43
43
  }
44
44
  emitLazy() {
45
- try {
46
- this.lazyEmitter.emit('lazy', this.pendingEvents, this.pendingEvents.map(e => e.type));
47
- } catch (e) {
48
- console.error('Get error in some listener of lazy event', e);
49
- }
45
+ this.lazyEmitter.emit('lazy', this.pendingEvents, this.pendingEvents.map(e => e.type));
50
46
  this.pendingEvents = [];
51
47
  this.timeoutId = null;
52
48
  }
@@ -1,11 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.COMMON_RELOAD_EVENTS = void 0;
7
- // Copyright 2019-2022 @subwallet/extension-base
8
- // SPDX-License-Identifier: Apache-2.0
9
-
10
- const COMMON_RELOAD_EVENTS = ['account.updateCurrent', 'asset.updateState', 'account.add', 'chain.updateState', 'account.remove', 'chain.add'];
11
- exports.COMMON_RELOAD_EVENTS = COMMON_RELOAD_EVENTS;
1
+ "use strict";
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.HistoryService = void 0;
7
7
  var _constants = require("@subwallet/extension-base/constants");
8
+ var _address = require("@subwallet/extension-base/utils/address");
8
9
  var _uiKeyring = require("@subwallet/ui-keyring");
9
10
  var _accounts = require("@subwallet/ui-keyring/observable/accounts");
10
11
  var _rxjs = require("rxjs");
@@ -56,7 +57,7 @@ class HistoryService {
56
57
  record.fromName = accountMap[(_record$from = record.from) === null || _record$from === void 0 ? void 0 : _record$from.toLowerCase()];
57
58
  record.toName = accountMap[(_record$to = record.to) === null || _record$to === void 0 ? void 0 : _record$to.toLowerCase()];
58
59
  });
59
- await this.addHistoryItems(historyRecords);
60
+ this.dbService.upsertHistory(historyRecords).catch(console.error);
60
61
  return historyRecords;
61
62
  }
62
63
  async fetchHistories(addresses) {
@@ -81,8 +82,8 @@ class HistoryService {
81
82
  const addressList = _uiKeyring.keyring.getAccounts().map(a => a.address);
82
83
  const currentHistories = this.historySubject.value;
83
84
  if (!this.fetchPromise || currentHistories.length === 0) {
84
- await this.fetchHistories(addressList);
85
- this.historySubject.next(await this.dbService.getHistories());
85
+ const historyRecords = await this.fetchHistories(addressList);
86
+ this.historySubject.next(historyRecords);
86
87
  }
87
88
  return this.historySubject.getValue();
88
89
  }
@@ -90,6 +91,10 @@ class HistoryService {
90
91
  await this.getHistories();
91
92
  return this.historySubject;
92
93
  }
94
+ async insertHistories(historyItems) {
95
+ await this.dbService.upsertHistory(historyItems);
96
+ this.historySubject.next(await this.dbService.getHistories());
97
+ }
93
98
  async updateHistories(chain, extrinsicHash, updateData) {
94
99
  const existedRecords = await this.dbService.getHistories({
95
100
  chain,
@@ -103,25 +108,14 @@ class HistoryService {
103
108
  });
104
109
  await this.addHistoryItems(updatedRecords);
105
110
  }
106
-
107
- // Insert history without check override origin 'app'
108
- async insertHistories(historyItems) {
109
- await this.dbService.upsertHistory(historyItems);
110
- this.historySubject.next(await this.dbService.getHistories());
111
- }
112
-
113
- // Insert history with check override origin 'app'
114
111
  async addHistoryItems(historyItems) {
115
112
  // Prevent override record with original is 'app'
116
113
  const appRecords = this.historySubject.value.filter(item => item.origin === 'app');
117
114
  const excludeKeys = appRecords.map(item => {
118
- return `${item.chain}-${item.extrinsicHash}`;
115
+ return `${item.chain}-${(0, _address.quickFormatAddressToCompare)(item.address) || ''}-${item.extrinsicHash}`;
119
116
  });
120
117
  const updateRecords = historyItems.filter(item => {
121
- const key = `${item.chain}-${item.extrinsicHash}`;
122
-
123
- // !excludeKeys.includes(key) && console.log('Cancel update', key);
124
-
118
+ const key = `${item.chain}-${(0, _address.quickFormatAddressToCompare)(item.address) || ''}-${item.extrinsicHash}`;
125
119
  return item.origin === 'app' || !excludeKeys.includes(key);
126
120
  });
127
121
  await this.dbService.upsertHistory(updateRecords);
@@ -67,15 +67,12 @@ function autoFormatAddress(address) {
67
67
  return '';
68
68
  }
69
69
  }
70
- function generateSignature(input) {
71
- if (!input) {
72
- return '';
73
- }
74
- const {
70
+ function generateSignature(_ref) {
71
+ let {
75
72
  r,
76
73
  s,
77
74
  v
78
- } = input;
75
+ } = _ref;
79
76
  const rHex = r.startsWith('0x') ? r.slice(2) : r;
80
77
  const sHex = s.startsWith('0x') ? s.slice(2) : s;
81
78
  const vHex = parseInt(v).toString(16);
@@ -258,14 +255,14 @@ async function fetchMultiChainHistories(addresses, chainMap) {
258
255
  console.warn(`Not found chain info for chain id: ${chainId}`);
259
256
  return;
260
257
  }
261
- usedAddresses.forEach(address => {
262
- try {
258
+ try {
259
+ usedAddresses.forEach(address => {
263
260
  const transactionData = parseSubsquidTransactionData(address, name, historyItem, chainInfo, parseData(args), parseData(_data));
264
261
  histories.push(transactionData);
265
- } catch (e) {
266
- console.warn('Parse transaction data failed', address, e);
267
- }
268
- });
262
+ });
263
+ } catch (e) {
264
+ console.warn('Parse transaction data failed', e);
265
+ }
269
266
  });
270
267
  return histories;
271
268
  }
@@ -24,6 +24,7 @@ const getTokenPrice = async function (priceIds) {
24
24
  }
25
25
  }
26
26
  if (useBackupApi || ((_res = res) === null || _res === void 0 ? void 0 : _res.status) !== 200) {
27
+ console.log('Use backup api for price');
27
28
  useBackupApi = true;
28
29
  res = await _axios.default.get(`https://chain-data.subwallet.app/api/price/get?ids=${idStr}`);
29
30
  }
@@ -37,8 +37,8 @@ class PriceService {
37
37
  };
38
38
  this.eventService.waitAssetReady.then(() => {
39
39
  this.refreshPriceData();
40
- this.eventService.on('asset.updateState', eventHandler);
41
- this.eventService.on('asset.updateState', eventHandler);
40
+ this.eventService.on('asset.enable', eventHandler);
41
+ this.eventService.on('asset.update', eventHandler);
42
42
  }).catch(console.error);
43
43
  }
44
44
  async getPrice() {
@@ -68,6 +68,7 @@ class PriceService {
68
68
  ready: true
69
69
  });
70
70
  this.dbService.updatePriceStore(rs).catch(console.error);
71
+ console.log('Get Token Price From CoinGecko');
71
72
  }).catch(console.error);
72
73
  this.refreshTimeout = setTimeout(this.refreshPriceData.bind(this), _constants.CRON_REFRESH_PRICE_INTERVAL);
73
74
  }
@@ -95,11 +95,11 @@ class AuthRequestHandler {
95
95
  const chainInfoMaps = this.#chainService.getChainInfoMap();
96
96
  const chainStateMap = this.#chainService.getChainStateMap();
97
97
  let defaultChain = options.defaultChain;
98
- let needEnableChains = [];
98
+ const needEnableChains = [];
99
99
  if (options.url) {
100
100
  const domain = (0, _utils2.getDomainFromUrl)(options.url);
101
101
  const predefinedSupportChains = _constants.PREDEFINED_CHAIN_DAPP_CHAIN_MAP[domain];
102
- if (!defaultChain && predefinedSupportChains) {
102
+ if (predefinedSupportChains) {
103
103
  defaultChain = predefinedSupportChains[0];
104
104
  options.autoActive && needEnableChains.push(...predefinedSupportChains);
105
105
  }
@@ -117,10 +117,6 @@ class AuthRequestHandler {
117
117
  }
118
118
  }
119
119
  }
120
- needEnableChains = needEnableChains.filter(slug => {
121
- var _chainStateMap$slug;
122
- return !((_chainStateMap$slug = chainStateMap[slug]) !== null && _chainStateMap$slug !== void 0 && _chainStateMap$slug.active);
123
- });
124
120
  needEnableChains.length > 0 && this.#chainService.enableChains(needEnableChains);
125
121
  return chainInfo;
126
122
  }
@@ -10,7 +10,6 @@ var _databases = _interopRequireDefault(require("@subwallet/extension-base/servi
10
10
  var _dbStores = require("@subwallet/extension-base/services/storage-service/db-stores");
11
11
  var _ChainStakingMetadata = _interopRequireDefault(require("@subwallet/extension-base/services/storage-service/db-stores/ChainStakingMetadata"));
12
12
  var _NominatorMetadata = _interopRequireDefault(require("@subwallet/extension-base/services/storage-service/db-stores/NominatorMetadata"));
13
- var _utils = require("@subwallet/extension-base/utils");
14
13
  var _util = require("@polkadot/util");
15
14
  // Copyright 2019-2022 @subwallet/extension-base authors & contributors
16
15
  // SPDX-License-Identifier: Apache-2.0
@@ -55,8 +54,7 @@ class DatabaseService {
55
54
  }
56
55
  async updateBalanceStore(address, item) {
57
56
  if (item.state === _KoniTypes.APIItemState.READY) {
58
- // this.logger.log(`Updating balance for [${item.tokenSlug}]`);
59
-
57
+ this.logger.log(`Updating balance for [${item.tokenSlug}]`);
60
58
  return this.stores.balance.upsert({
61
59
  address,
62
60
  ...item
@@ -71,16 +69,14 @@ class DatabaseService {
71
69
  // Crowdloan
72
70
  async updateCrowdloanStore(chain, address, item) {
73
71
  if (item.state === _KoniTypes.APIItemState.READY && item.contribute !== '0') {
74
- // this.logger.log(`Updating crowdloan for [${chain}]`);
75
-
72
+ this.logger.log(`Updating crowdloan for [${chain}]`);
76
73
  return this.stores.crowdloan.upsert({
77
74
  chain,
78
75
  address,
79
76
  ...item
80
77
  });
81
78
  } else {
82
- // this.logger.debug(`Removing crowdloan for [${chain}]`);
83
-
79
+ this.logger.debug(`Removing crowdloan for [${chain}]`);
84
80
  return this.stores.crowdloan.deleteByChainAndAddress(chain, address);
85
81
  }
86
82
  }
@@ -88,23 +84,22 @@ class DatabaseService {
88
84
  // Staking
89
85
  async updateStaking(chain, address, item) {
90
86
  if (item.state === _KoniTypes.APIItemState.READY) {
91
- // this.logger.log(`Updating staking for [${chain}]`);
92
-
87
+ this.logger.log(`Updating staking for [${chain}]`);
93
88
  return this.stores.staking.upsert(item);
94
89
  }
95
90
  }
96
91
  async getStakings(addresses, chains) {
97
- // this.logger.log('Get Stakings: ', stakings);
98
-
99
- return this.stores.staking.getStakings(addresses, chains);
92
+ const stakings = await this.stores.staking.getStakings(addresses, chains);
93
+ this.logger.log('Get Stakings: ', stakings);
94
+ return stakings;
100
95
  }
101
96
  async getStakingsByChains(chains) {
102
97
  return this.stores.staking.getStakingsByChains(chains);
103
98
  }
104
99
  async getPooledStakings(addresses, chainHashes) {
105
- // this.logger.log('Get Pooled Stakings: ', stakings);
106
-
107
- return this.stores.staking.getPooledStakings(addresses, chainHashes);
100
+ const stakings = await this.stores.staking.getPooledStakings(addresses, chainHashes);
101
+ this.logger.log('Get Pooled Stakings: ', stakings);
102
+ return stakings;
108
103
  }
109
104
  subscribeStaking(addresses, chainList, callback) {
110
105
  this.stakingSubscription && this.stakingSubscription.unsubscribe();
@@ -126,18 +121,18 @@ class DatabaseService {
126
121
 
127
122
  // Transaction histories
128
123
  async getHistories(query) {
129
- return this.stores.transaction.queryHistory(query);
124
+ const histories = await this.stores.transaction.queryHistory(query);
125
+ this.logger.log('Get histories: ', histories);
126
+ return histories;
130
127
  }
131
128
  async upsertHistory(histories) {
132
- // this.logger.log('Updating transaction histories');
133
-
129
+ this.logger.log('Updating transaction histories');
134
130
  return this.stores.transaction.bulkUpsert(histories);
135
131
  }
136
132
 
137
133
  // NFT Collection
138
134
  async addNftCollection(collection) {
139
- // this.logger.log(`Updating NFT collection for [${collection.chain}]`);
140
-
135
+ this.logger.log(`Updating NFT collection for [${collection.chain}]`);
141
136
  return this.stores.nftCollection.upsert(collection);
142
137
  }
143
138
  async deleteNftCollection(chain, collectionId) {
@@ -156,19 +151,13 @@ class DatabaseService {
156
151
  });
157
152
  return this.nftSubscription;
158
153
  }
159
- async cleanUpNft(chain, owner, collectionId, nftIds) {
160
- const result = await this.stores.nft.cleanUpNfts(chain, (0, _utils.reformatAddress)(owner, 42), collectionId, nftIds);
161
- result > 0 && console.debug(`Clean up ${result} NFTs from collection ${collectionId} on chain ${chain} for owner ${owner}`);
162
- return result;
163
- }
164
154
  async getNft(addresses, chainHashes) {
165
- // this.logger.log('Get NFTs: ', nfts);
166
-
167
- return this.stores.nft.getNft(addresses, chainHashes);
155
+ const nfts = await this.stores.nft.getNft(addresses, chainHashes);
156
+ this.logger.log('Get NFTs: ', nfts);
157
+ return nfts;
168
158
  }
169
159
  async addNft(address, nft) {
170
- // this.logger.log(`Updating NFT for [${nft.chain}]`);
171
-
160
+ this.logger.log(`Updating NFT for [${nft.chain}]`);
172
161
  return this.stores.nft.upsert({
173
162
  ...nft,
174
163
  address
@@ -178,54 +167,47 @@ class DatabaseService {
178
167
  return this.stores.nft.deleteNftItem(chain, addresses, nftItem);
179
168
  }
180
169
  removeNfts(chain, address, collectionId, nftIds) {
181
- // this.logger.log(`Remove NFTs [${nftIds.join(', ')}]`);
182
-
170
+ this.logger.log(`Remove NFTs [${nftIds.join(', ')}]`);
183
171
  return this.stores.nft.removeNfts(chain, address, collectionId, nftIds);
184
172
  }
185
173
 
186
174
  // Chain
187
175
  async updateChainStore(item) {
188
- // this.logger.log(`Updating storageInfo for chain [${item.slug}]`);
189
-
176
+ this.logger.log(`Updating storageInfo for chain [${item.slug}]`);
190
177
  return this.stores.chain.upsert(item);
191
178
  }
192
179
  async bulkUpdateChainStore(data) {
193
- // this.logger.log('Bulk updating ChainStore');
194
-
180
+ this.logger.log('Bulk updating ChainStore');
195
181
  return this.stores.chain.bulkUpsert(data);
196
182
  }
197
183
  async removeFromChainStore(chains) {
198
- // this.logger.log('Bulk removing ChainStore');
199
-
184
+ this.logger.log('Bulk removing ChainStore');
200
185
  return this.stores.chain.removeChains(chains);
201
186
  }
202
187
  async getAllChainStore() {
203
- // this.logger.log('Get all chains: ', allChains);
204
-
205
- return this.stores.chain.getAll();
188
+ const allChains = await this.stores.chain.getAll();
189
+ this.logger.log('Get all chains: ', allChains);
190
+ return allChains;
206
191
  }
207
192
 
208
193
  // Asset
209
194
  async updateAssetStore(item) {
210
- // this.logger.log(`Updating storageInfo for chainAsset [${item.originChain}]`);
211
-
195
+ this.logger.log(`Updating storageInfo for chainAsset [${item.originChain}]`);
212
196
  return this.stores.asset.upsert(item);
213
197
  }
214
198
  async getAllAssetStore() {
215
- // this.logger.log('Get all stored assets: ', allAssets);
216
-
217
- return this.stores.asset.getAll();
199
+ const allAssets = await this.stores.asset.getAll();
200
+ this.logger.log('Get all stored assets: ', allAssets);
201
+ return allAssets;
218
202
  }
219
203
  async removeFromAssetStore(items) {
220
- // this.logger.log('Bulk removing AssetStore');
221
-
204
+ this.logger.log('Bulk removing AssetStore');
222
205
  return this.stores.asset.removeAssets(items);
223
206
  }
224
207
 
225
208
  // Staking
226
209
  async updateChainStakingMetadata(item) {
227
- // this.logger.log('Update ChainStakingMetadata: ', item.chain);
228
-
210
+ this.logger.log('Update ChainStakingMetadata: ', item.chain);
229
211
  return this.stores.chainStakingMetadata.upsert(item);
230
212
  }
231
213
  async getChainStakingMetadata() {
@@ -236,8 +218,7 @@ class DatabaseService {
236
218
  return this.stores.chainStakingMetadata.getByChainAndType(chain, type);
237
219
  }
238
220
  async updateNominatorMetadata(item) {
239
- // this.logger.log('Update NominatorMetadata: ', item.address, item.chain);
240
-
221
+ this.logger.log('Update NominatorMetadata: ', item.address, item.chain);
241
222
  return this.stores.nominatorMetadata.upsert(item);
242
223
  }
243
224
  async getNominatorMetadata() {
@@ -24,12 +24,25 @@ class NftStore extends _BaseStoreWithAddressAndChain.default {
24
24
  let chainList = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
25
25
  return (0, _dexie.liveQuery)(() => this.getNft(addresses, chainList));
26
26
  }
27
- cleanUpNfts(chain, address, collectionId, nftIds) {
27
+ deleteRemovedNftsFromCollection(chainHash, address, collection) {
28
+ let nftIds = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
29
+ const conditions = {
30
+ chainHash,
31
+ address
32
+ };
33
+ if (!collection && nftIds && nftIds.length) {
34
+ return this.logger.warn('Missing collection id');
35
+ }
36
+ if (collection) {
37
+ conditions.collectionId = collection;
38
+ }
39
+ return this.table.where(conditions).and(item => !nftIds.some(nft => nft === item.id)).delete();
40
+ }
41
+ deleteNftsFromRemovedCollection(chain, address, collectionIds) {
28
42
  return this.table.where({
29
43
  address,
30
- chain,
31
- collectionId
32
- }).and(nft => !nftIds.includes(nft.id)).delete();
44
+ chain
45
+ }).and(nft => !collectionIds.some(item => item === nft.collectionId));
33
46
  }
34
47
  deleteNftByAddress(addresses) {
35
48
  return this.table.where('address').anyOfIgnoreCase(addresses).delete();
@@ -10,28 +10,43 @@ var _utils = require("@subwallet/extension-base/services/chain-service/utils");
10
10
  // SPDX-License-Identifier: Apache-2.0
11
11
 
12
12
  function parseXcmEventLogs(historyItem, eventLogs, chain, sendingTokenInfo, chainInfo) {
13
+ let isFeeUseMainTokenSymbol = true;
13
14
  for (let index = 0; index < eventLogs.length; index++) {
14
15
  const record = eventLogs[index];
16
+ if (['karura', 'acala', 'acala_testnet'].includes(chain) && sendingTokenInfo && !(0, _utils._isNativeToken)(sendingTokenInfo)) {
17
+ if (record.event.section === 'currencies' && record.event.method.toLowerCase() === 'transferred') {
18
+ if (index === 0) {
19
+ var _record$event$data$;
20
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
21
+ historyItem.fee = {
22
+ value: ((_record$event$data$ = record.event.data[3]) === null || _record$event$data$ === void 0 ? void 0 : _record$event$data$.toString()) || '0',
23
+ symbol: sendingTokenInfo.symbol,
24
+ decimals: (0, _utils._getAssetDecimals)(sendingTokenInfo)
25
+ };
26
+ isFeeUseMainTokenSymbol = false;
27
+ }
28
+ }
29
+ }
15
30
  const {
16
31
  decimals: nativeDecimals,
17
32
  symbol: nativeSymbol
18
33
  } = (0, _utils._getChainNativeTokenBasicInfo)(chainInfo);
19
- if (record.event.section === 'balances' && record.event.method.toLowerCase() === 'withdraw') {
20
- var _record$event$data$;
21
- if ((_record$event$data$ = record.event.data[1]) !== null && _record$event$data$ !== void 0 && _record$event$data$.toString()) {
22
- var _record$event$data$2;
34
+ if (isFeeUseMainTokenSymbol && record.event.section === 'balances' && record.event.method.toLowerCase() === 'withdraw') {
35
+ var _record$event$data$2;
36
+ if ((_record$event$data$2 = record.event.data[1]) !== null && _record$event$data$2 !== void 0 && _record$event$data$2.toString()) {
37
+ var _record$event$data$3;
23
38
  historyItem.fee = {
24
- value: (_record$event$data$2 = record.event.data[1]) === null || _record$event$data$2 === void 0 ? void 0 : _record$event$data$2.toString(),
39
+ value: (_record$event$data$3 = record.event.data[1]) === null || _record$event$data$3 === void 0 ? void 0 : _record$event$data$3.toString(),
25
40
  symbol: nativeSymbol,
26
41
  decimals: nativeDecimals
27
42
  };
28
43
  }
29
- } else if (record.event.section === 'tokens' && record.event.method.toLowerCase() === 'withdrawn') {
30
- var _record$event$data$3;
31
- if (!historyItem.fee && (_record$event$data$3 = record.event.data[2]) !== null && _record$event$data$3 !== void 0 && _record$event$data$3.toString()) {
32
- var _record$event$data$4;
44
+ } else if (isFeeUseMainTokenSymbol && record.event.section === 'tokens' && record.event.method.toLowerCase() === 'withdrawn') {
45
+ var _record$event$data$4;
46
+ if ((_record$event$data$4 = record.event.data[2]) !== null && _record$event$data$4 !== void 0 && _record$event$data$4.toString()) {
47
+ var _record$event$data$5;
33
48
  historyItem.fee = {
34
- value: (_record$event$data$4 = record.event.data[2]) === null || _record$event$data$4 === void 0 ? void 0 : _record$event$data$4.toString(),
49
+ value: (_record$event$data$5 = record.event.data[2]) === null || _record$event$data$5 === void 0 ? void 0 : _record$event$data$5.toString(),
35
50
  symbol: nativeSymbol,
36
51
  decimals: nativeDecimals
37
52
  };
@@ -40,15 +55,28 @@ function parseXcmEventLogs(historyItem, eventLogs, chain, sendingTokenInfo, chai
40
55
  }
41
56
  }
42
57
  function parseTransferEventLogs(historyItem, eventLogs, chain, sendingTokenInfo, chainInfo) {
58
+ let isFeeUseMainTokenSymbol = true;
43
59
  for (let index = 0; index < eventLogs.length; index++) {
44
60
  const record = eventLogs[index];
45
- if (['genshiro_testnet', 'genshiro', 'equilibrium_parachain'].includes(chain) && sendingTokenInfo) {
46
- if (record.event.section === 'transactionPayment' && record.event.method.toLowerCase() === 'transactionfeepaid') {
47
- var _record$event$data$5;
48
- if ((_record$event$data$5 = record.event.data[1]) !== null && _record$event$data$5 !== void 0 && _record$event$data$5.toString()) {
61
+ if (['karura', 'acala', 'acala_testnet'].includes(chain) && !(0, _utils._isNativeToken)(sendingTokenInfo)) {
62
+ if (record.event.section === 'currencies' && record.event.method.toLowerCase() === 'transferred') {
63
+ if (index === 0) {
49
64
  var _record$event$data$6;
50
65
  historyItem.fee = {
51
- value: ((_record$event$data$6 = record.event.data[1]) === null || _record$event$data$6 === void 0 ? void 0 : _record$event$data$6.toString()) || '0',
66
+ value: ((_record$event$data$6 = record.event.data[3]) === null || _record$event$data$6 === void 0 ? void 0 : _record$event$data$6.toString()) || '0',
67
+ symbol: sendingTokenInfo.symbol,
68
+ decimals: (0, _utils._getAssetDecimals)(sendingTokenInfo)
69
+ };
70
+ isFeeUseMainTokenSymbol = false;
71
+ }
72
+ }
73
+ } else if (['genshiro_testnet', 'genshiro', 'equilibrium_parachain'].includes(chain) && sendingTokenInfo) {
74
+ if (record.event.section === 'transactionPayment' && record.event.method.toLowerCase() === 'transactionfeepaid') {
75
+ var _record$event$data$7;
76
+ if ((_record$event$data$7 = record.event.data[1]) !== null && _record$event$data$7 !== void 0 && _record$event$data$7.toString()) {
77
+ var _record$event$data$8;
78
+ historyItem.fee = {
79
+ value: ((_record$event$data$8 = record.event.data[1]) === null || _record$event$data$8 === void 0 ? void 0 : _record$event$data$8.toString()) || '0',
52
80
  symbol: sendingTokenInfo.symbol,
53
81
  decimals: (0, _utils._getAssetDecimals)(sendingTokenInfo)
54
82
  };
@@ -59,13 +87,13 @@ function parseTransferEventLogs(historyItem, eventLogs, chain, sendingTokenInfo,
59
87
  decimals: nativeDecimals,
60
88
  symbol: nativeSymbol
61
89
  } = (0, _utils._getChainNativeTokenBasicInfo)(chainInfo);
62
- if (record.event.section === 'balances' && record.event.method.toLowerCase() === 'withdraw') {
63
- var _record$event$data$7;
64
- if ((_record$event$data$7 = record.event.data[1]) !== null && _record$event$data$7 !== void 0 && _record$event$data$7.toString()) {
65
- var _record$event$data$8;
90
+ if (isFeeUseMainTokenSymbol && record.event.section === 'balances' && record.event.method.toLowerCase() === 'withdraw') {
91
+ var _record$event$data$9;
92
+ if ((_record$event$data$9 = record.event.data[1]) !== null && _record$event$data$9 !== void 0 && _record$event$data$9.toString()) {
93
+ var _record$event$data$10;
66
94
  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
67
95
  historyItem.fee = {
68
- value: ((_record$event$data$8 = record.event.data[1]) === null || _record$event$data$8 === void 0 ? void 0 : _record$event$data$8.toString()) || '0',
96
+ value: ((_record$event$data$10 = record.event.data[1]) === null || _record$event$data$10 === void 0 ? void 0 : _record$event$data$10.toString()) || '0',
69
97
  symbol: nativeSymbol,
70
98
  decimals: nativeDecimals
71
99
  };
@@ -434,11 +434,11 @@ class TransactionService {
434
434
  }
435
435
  try {
436
436
  // Return one more history record if transaction send to account in the wallets
437
- const toAccount = (historyItem === null || historyItem === void 0 ? void 0 : historyItem.to) && _uiKeyring.default.getPair(historyItem.to);
437
+ const toAccount = (historyItem === null || historyItem === void 0 ? void 0 : historyItem.to) && _uiKeyring.default.getAccount(historyItem.to);
438
438
  if (toAccount) {
439
439
  return [historyItem, {
440
440
  ...historyItem,
441
- address: toAccount.address,
441
+ address: historyItem.to,
442
442
  direction: _KoniTypes.TransactionDirection.RECEIVED
443
443
  }];
444
444
  }
@@ -464,27 +464,18 @@ class TransactionService {
464
464
  handlePostProcessing(id) {
465
465
  // must be done after success/failure to make sure the transaction is finalized
466
466
  const transaction = this.getTransaction(id);
467
- if (transaction.extrinsicType === _KoniTypes.ExtrinsicType.SEND_NFT) {
468
- const inputData = (0, _utils2.parseTransactionData)(transaction.data);
469
- try {
470
- const sender = _uiKeyring.default.getPair(inputData.senderAddress);
471
- sender && this.databaseService.handleNftTransfer(transaction.chain, [sender.address, _constants.ALL_ACCOUNT_KEY], inputData.nftItem).then(() => {
472
- this.eventService.emit('transaction.transferNft', undefined);
473
- }).catch(console.error);
474
- } catch (e) {
475
- console.error(e);
476
- }
477
- try {
478
- const recipient = _uiKeyring.default.getPair(inputData.recipientAddress);
479
- recipient && this.databaseService.addNft(recipient.address, {
480
- ...inputData.nftItem,
481
- owner: recipient.address
482
- }).catch(console.error);
483
- } catch (e) {
484
- console.error(e);
485
- }
486
- } else if ([_KoniTypes.ExtrinsicType.STAKING_BOND, _KoniTypes.ExtrinsicType.STAKING_UNBOND, _KoniTypes.ExtrinsicType.STAKING_WITHDRAW, _KoniTypes.ExtrinsicType.STAKING_CANCEL_UNSTAKE, _KoniTypes.ExtrinsicType.STAKING_CLAIM_REWARD, _KoniTypes.ExtrinsicType.STAKING_JOIN_POOL, _KoniTypes.ExtrinsicType.STAKING_POOL_WITHDRAW, _KoniTypes.ExtrinsicType.STAKING_LEAVE_POOL].includes(transaction.extrinsicType)) {
487
- this.eventService.emit('transaction.submitStaking', transaction.chain);
467
+ switch (transaction.extrinsicType) {
468
+ case _KoniTypes.ExtrinsicType.SEND_NFT:
469
+ {
470
+ const inputData = (0, _utils2.parseTransactionData)(transaction.data);
471
+ const sender = _uiKeyring.default.getAccount(inputData.senderAddress);
472
+ const recipient = _uiKeyring.default.getAccount(inputData.recipientAddress);
473
+ sender && this.databaseService.handleNftTransfer(transaction.chain, [sender.address, _constants.ALL_ACCOUNT_KEY], inputData.nftItem).catch(console.error);
474
+ recipient && this.databaseService.addNft(recipient.address, {
475
+ ...inputData.nftItem,
476
+ owner: recipient.address
477
+ }).catch(console.error);
478
+ }
488
479
  }
489
480
  }
490
481
  onSuccess(_ref2) {