@subwallet/extension-base 1.0.2-1 → 1.0.2-1b

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 (120) hide show
  1. package/background/KoniTypes.d.ts +16 -34
  2. package/background/KoniTypes.js +6 -7
  3. package/background/errors/TransactionError.js +21 -1
  4. package/cjs/background/KoniTypes.js +6 -7
  5. package/cjs/background/errors/TransactionError.js +20 -0
  6. package/cjs/constants/index.js +8 -26
  7. package/cjs/koni/api/dotsama/balance.js +49 -224
  8. package/cjs/koni/api/dotsama/transfer.js +30 -29
  9. package/cjs/koni/api/nft/acala_nft/index.js +4 -1
  10. package/cjs/koni/api/nft/bit.country/index.js +4 -1
  11. package/cjs/koni/api/nft/evm_nft/index.js +7 -3
  12. package/cjs/koni/api/nft/index.js +3 -6
  13. package/cjs/koni/api/nft/karura_nft/index.js +4 -1
  14. package/cjs/koni/api/nft/rmrk_nft/index.js +8 -1
  15. package/cjs/koni/api/nft/statemine_nft/index.js +4 -1
  16. package/cjs/koni/api/nft/unique_nft/index.js +6 -1
  17. package/cjs/koni/api/nft/wasm_nft/index.js +169 -111
  18. package/cjs/koni/api/nft/wasm_nft/utils.js +11 -7
  19. package/cjs/koni/api/staking/bonding/amplitude.js +13 -9
  20. package/cjs/koni/api/staking/bonding/astar.js +15 -13
  21. package/cjs/koni/api/staking/bonding/index.js +22 -10
  22. package/cjs/koni/api/staking/bonding/paraChain.js +85 -2
  23. package/cjs/koni/api/staking/bonding/relayChain.js +119 -16
  24. package/cjs/koni/api/staking/bonding/utils.js +27 -8
  25. package/cjs/koni/api/tokens/wasm/index.js +5 -4
  26. package/cjs/koni/api/tokens/wasm/utils.js +63 -0
  27. package/cjs/koni/api/xcm/polkadotXcm.js +1 -1
  28. package/cjs/koni/api/xcm/utils.js +18 -13
  29. package/cjs/koni/api/xcm/xTokens.js +1 -1
  30. package/cjs/koni/api/xcm/xcmPallet.js +9 -6
  31. package/cjs/koni/background/cron.js +150 -47
  32. package/cjs/koni/background/handlers/Extension.js +106 -64
  33. package/cjs/koni/background/handlers/State.js +19 -21
  34. package/cjs/koni/background/handlers/Tabs.js +8 -1
  35. package/cjs/koni/background/subscription.js +32 -29
  36. package/cjs/services/chain-service/handler/SubstrateChainHandler.js +13 -8
  37. package/cjs/services/chain-service/handler/light-client/index.js +2 -0
  38. package/cjs/services/chain-service/index.js +6 -7
  39. package/cjs/services/event-service/index.js +5 -1
  40. package/cjs/services/event-service/types.js +11 -1
  41. package/cjs/services/history-service/index.js +16 -10
  42. package/cjs/services/history-service/subsquid-multi-chain-history.js +12 -9
  43. package/cjs/services/price-service/coingecko.js +0 -1
  44. package/cjs/services/price-service/index.js +2 -3
  45. package/cjs/services/request-service/handler/AuthRequestHandler.js +6 -2
  46. package/cjs/services/storage-service/DatabaseService.js +52 -33
  47. package/cjs/services/storage-service/db-stores/Nft.js +4 -17
  48. package/cjs/services/transaction-service/event-parser/index.js +20 -48
  49. package/cjs/services/transaction-service/index.js +23 -14
  50. package/cjs/utils/index.js +7 -14
  51. package/constants/index.d.ts +7 -13
  52. package/constants/index.js +7 -13
  53. package/koni/api/dotsama/balance.d.ts +0 -1
  54. package/koni/api/dotsama/balance.js +22 -197
  55. package/koni/api/dotsama/transfer.js +5 -4
  56. package/koni/api/nft/acala_nft/index.js +3 -1
  57. package/koni/api/nft/bit.country/index.js +3 -1
  58. package/koni/api/nft/evm_nft/index.js +6 -3
  59. package/koni/api/nft/index.d.ts +1 -2
  60. package/koni/api/nft/index.js +3 -6
  61. package/koni/api/nft/karura_nft/index.js +3 -1
  62. package/koni/api/nft/nft.d.ts +1 -0
  63. package/koni/api/nft/rmrk_nft/index.js +8 -1
  64. package/koni/api/nft/statemine_nft/index.js +3 -1
  65. package/koni/api/nft/unique_nft/index.js +5 -1
  66. package/koni/api/nft/wasm_nft/index.d.ts +0 -2
  67. package/koni/api/nft/wasm_nft/index.js +167 -109
  68. package/koni/api/nft/wasm_nft/utils.d.ts +7 -5
  69. package/koni/api/nft/wasm_nft/utils.js +7 -5
  70. package/koni/api/staking/bonding/amplitude.d.ts +0 -1
  71. package/koni/api/staking/bonding/amplitude.js +15 -10
  72. package/koni/api/staking/bonding/astar.js +8 -6
  73. package/koni/api/staking/bonding/index.d.ts +4 -1
  74. package/koni/api/staking/bonding/index.js +23 -13
  75. package/koni/api/staking/bonding/paraChain.d.ts +3 -0
  76. package/koni/api/staking/bonding/paraChain.js +86 -5
  77. package/koni/api/staking/bonding/relayChain.d.ts +5 -1
  78. package/koni/api/staking/bonding/relayChain.js +118 -18
  79. package/koni/api/staking/bonding/utils.d.ts +3 -2
  80. package/koni/api/staking/bonding/utils.js +27 -9
  81. package/koni/api/tokens/wasm/index.js +5 -4
  82. package/koni/api/tokens/wasm/utils.d.ts +6 -0
  83. package/koni/api/tokens/wasm/utils.js +54 -0
  84. package/koni/api/xcm/polkadotXcm.js +2 -2
  85. package/koni/api/xcm/utils.d.ts +5 -6
  86. package/koni/api/xcm/utils.js +15 -10
  87. package/koni/api/xcm/xTokens.js +2 -2
  88. package/koni/api/xcm/xcmPallet.js +10 -9
  89. package/koni/background/cron.d.ts +6 -1
  90. package/koni/background/cron.js +151 -48
  91. package/koni/background/handlers/Extension.d.ts +2 -2
  92. package/koni/background/handlers/Extension.js +108 -67
  93. package/koni/background/handlers/State.d.ts +5 -6
  94. package/koni/background/handlers/State.js +19 -21
  95. package/koni/background/handlers/Tabs.js +8 -1
  96. package/koni/background/subscription.js +31 -30
  97. package/package.json +9 -4
  98. package/services/chain-service/handler/SubstrateChainHandler.js +14 -9
  99. package/services/chain-service/handler/light-client/index.d.ts +17 -1
  100. package/services/chain-service/handler/light-client/index.js +1 -1
  101. package/services/chain-service/helper/psp22_abi.json +1041 -881
  102. package/services/chain-service/helper/psp34_abi.json +2963 -1807
  103. package/services/chain-service/index.js +6 -7
  104. package/services/event-service/index.js +5 -1
  105. package/services/event-service/types.d.ts +5 -9
  106. package/services/event-service/types.js +4 -1
  107. package/services/history-service/index.d.ts +1 -1
  108. package/services/history-service/index.js +16 -10
  109. package/services/history-service/subsquid-multi-chain-history.js +15 -11
  110. package/services/price-service/coingecko.js +0 -1
  111. package/services/price-service/index.js +2 -3
  112. package/services/request-service/handler/AuthRequestHandler.js +6 -2
  113. package/services/storage-service/DatabaseService.d.ts +1 -0
  114. package/services/storage-service/DatabaseService.js +52 -33
  115. package/services/storage-service/db-stores/Nft.d.ts +1 -2
  116. package/services/storage-service/db-stores/Nft.js +4 -16
  117. package/services/transaction-service/event-parser/index.js +21 -49
  118. package/services/transaction-service/index.js +23 -14
  119. package/utils/index.d.ts +1 -1
  120. package/utils/index.js +6 -12
@@ -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.remove', slug);
289
+ this.eventService.emit('chain.updateState', 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.remove', assetSlug);
355
+ this.eventService.emit('asset.updateState', 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.enable', chainSlug);
429
+ this.eventService.emit('chain.updateState', 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.disable', chainSlug);
464
+ this.eventService.emit('chain.updateState', 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.update', chainSlug);
688
+ this.eventService.emit('chain.updateState', chainSlug);
689
689
  }).catch(e => this.logger.error(e));
690
690
  }
691
691
  insertChain(params) {
@@ -1120,7 +1120,6 @@ 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');
1124
1123
  }
1125
1124
  setAssetSettings(assetSettings) {
1126
1125
  let emitEvent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
@@ -1135,7 +1134,7 @@ class ChainService {
1135
1134
  }
1136
1135
  this.assetSettingSubject.next(assetSettings);
1137
1136
  updateAssets.forEach(slug => {
1138
- this.eventService.emit(assetSettings[slug].visible ? 'asset.enable' : 'asset.disable', slug);
1137
+ this.eventService.emit('asset.updateState', slug);
1139
1138
  });
1140
1139
  this.store.set('AssetSetting', assetSettings);
1141
1140
  }
@@ -42,7 +42,11 @@ class EventService extends _eventemitter.default {
42
42
  }, this.lazyTime);
43
43
  }
44
44
  emitLazy() {
45
- this.lazyEmitter.emit('lazy', this.pendingEvents, this.pendingEvents.map(e => e.type));
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
+ }
46
50
  this.pendingEvents = [];
47
51
  this.timeoutId = null;
48
52
  }
@@ -1 +1,11 @@
1
- "use strict";
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;
@@ -5,7 +5,6 @@ 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");
9
8
  var _uiKeyring = require("@subwallet/ui-keyring");
10
9
  var _accounts = require("@subwallet/ui-keyring/observable/accounts");
11
10
  var _rxjs = require("rxjs");
@@ -57,7 +56,7 @@ class HistoryService {
57
56
  record.fromName = accountMap[(_record$from = record.from) === null || _record$from === void 0 ? void 0 : _record$from.toLowerCase()];
58
57
  record.toName = accountMap[(_record$to = record.to) === null || _record$to === void 0 ? void 0 : _record$to.toLowerCase()];
59
58
  });
60
- this.dbService.upsertHistory(historyRecords).catch(console.error);
59
+ await this.addHistoryItems(historyRecords);
61
60
  return historyRecords;
62
61
  }
63
62
  async fetchHistories(addresses) {
@@ -82,8 +81,8 @@ class HistoryService {
82
81
  const addressList = _uiKeyring.keyring.getAccounts().map(a => a.address);
83
82
  const currentHistories = this.historySubject.value;
84
83
  if (!this.fetchPromise || currentHistories.length === 0) {
85
- const historyRecords = await this.fetchHistories(addressList);
86
- this.historySubject.next(historyRecords);
84
+ await this.fetchHistories(addressList);
85
+ this.historySubject.next(await this.dbService.getHistories());
87
86
  }
88
87
  return this.historySubject.getValue();
89
88
  }
@@ -91,10 +90,6 @@ class HistoryService {
91
90
  await this.getHistories();
92
91
  return this.historySubject;
93
92
  }
94
- async insertHistories(historyItems) {
95
- await this.dbService.upsertHistory(historyItems);
96
- this.historySubject.next(await this.dbService.getHistories());
97
- }
98
93
  async updateHistories(chain, extrinsicHash, updateData) {
99
94
  const existedRecords = await this.dbService.getHistories({
100
95
  chain,
@@ -108,14 +103,25 @@ class HistoryService {
108
103
  });
109
104
  await this.addHistoryItems(updatedRecords);
110
105
  }
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'
111
114
  async addHistoryItems(historyItems) {
112
115
  // Prevent override record with original is 'app'
113
116
  const appRecords = this.historySubject.value.filter(item => item.origin === 'app');
114
117
  const excludeKeys = appRecords.map(item => {
115
- return `${item.chain}-${(0, _address.quickFormatAddressToCompare)(item.address) || ''}-${item.extrinsicHash}`;
118
+ return `${item.chain}-${item.extrinsicHash}`;
116
119
  });
117
120
  const updateRecords = historyItems.filter(item => {
118
- const key = `${item.chain}-${(0, _address.quickFormatAddressToCompare)(item.address) || ''}-${item.extrinsicHash}`;
121
+ const key = `${item.chain}-${item.extrinsicHash}`;
122
+
123
+ // !excludeKeys.includes(key) && console.log('Cancel update', key);
124
+
119
125
  return item.origin === 'app' || !excludeKeys.includes(key);
120
126
  });
121
127
  await this.dbService.upsertHistory(updateRecords);
@@ -67,12 +67,15 @@ function autoFormatAddress(address) {
67
67
  return '';
68
68
  }
69
69
  }
70
- function generateSignature(_ref) {
71
- let {
70
+ function generateSignature(input) {
71
+ if (!input) {
72
+ return '';
73
+ }
74
+ const {
72
75
  r,
73
76
  s,
74
77
  v
75
- } = _ref;
78
+ } = input;
76
79
  const rHex = r.startsWith('0x') ? r.slice(2) : r;
77
80
  const sHex = s.startsWith('0x') ? s.slice(2) : s;
78
81
  const vHex = parseInt(v).toString(16);
@@ -255,14 +258,14 @@ async function fetchMultiChainHistories(addresses, chainMap) {
255
258
  console.warn(`Not found chain info for chain id: ${chainId}`);
256
259
  return;
257
260
  }
258
- try {
259
- usedAddresses.forEach(address => {
261
+ usedAddresses.forEach(address => {
262
+ try {
260
263
  const transactionData = parseSubsquidTransactionData(address, name, historyItem, chainInfo, parseData(args), parseData(_data));
261
264
  histories.push(transactionData);
262
- });
263
- } catch (e) {
264
- console.warn('Parse transaction data failed', e);
265
- }
265
+ } catch (e) {
266
+ console.warn('Parse transaction data failed', address, e);
267
+ }
268
+ });
266
269
  });
267
270
  return histories;
268
271
  }
@@ -24,7 +24,6 @@ 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');
28
27
  useBackupApi = true;
29
28
  res = await _axios.default.get(`https://chain-data.subwallet.app/api/price/get?ids=${idStr}`);
30
29
  }
@@ -37,8 +37,8 @@ class PriceService {
37
37
  };
38
38
  this.eventService.waitAssetReady.then(() => {
39
39
  this.refreshPriceData();
40
- this.eventService.on('asset.enable', eventHandler);
41
- this.eventService.on('asset.update', eventHandler);
40
+ this.eventService.on('asset.updateState', eventHandler);
41
+ this.eventService.on('asset.updateState', eventHandler);
42
42
  }).catch(console.error);
43
43
  }
44
44
  async getPrice() {
@@ -68,7 +68,6 @@ 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');
72
71
  }).catch(console.error);
73
72
  this.refreshTimeout = setTimeout(this.refreshPriceData.bind(this), _constants.CRON_REFRESH_PRICE_INTERVAL);
74
73
  }
@@ -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
- const needEnableChains = [];
98
+ let 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 (predefinedSupportChains) {
102
+ if (!defaultChain && predefinedSupportChains) {
103
103
  defaultChain = predefinedSupportChains[0];
104
104
  options.autoActive && needEnableChains.push(...predefinedSupportChains);
105
105
  }
@@ -117,6 +117,10 @@ 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
+ });
120
124
  needEnableChains.length > 0 && this.#chainService.enableChains(needEnableChains);
121
125
  return chainInfo;
122
126
  }
@@ -10,6 +10,7 @@ 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");
13
14
  var _util = require("@polkadot/util");
14
15
  // Copyright 2019-2022 @subwallet/extension-base authors & contributors
15
16
  // SPDX-License-Identifier: Apache-2.0
@@ -54,7 +55,8 @@ class DatabaseService {
54
55
  }
55
56
  async updateBalanceStore(address, item) {
56
57
  if (item.state === _KoniTypes.APIItemState.READY) {
57
- this.logger.log(`Updating balance for [${item.tokenSlug}]`);
58
+ // this.logger.log(`Updating balance for [${item.tokenSlug}]`);
59
+
58
60
  return this.stores.balance.upsert({
59
61
  address,
60
62
  ...item
@@ -69,14 +71,16 @@ class DatabaseService {
69
71
  // Crowdloan
70
72
  async updateCrowdloanStore(chain, address, item) {
71
73
  if (item.state === _KoniTypes.APIItemState.READY && item.contribute !== '0') {
72
- this.logger.log(`Updating crowdloan for [${chain}]`);
74
+ // this.logger.log(`Updating crowdloan for [${chain}]`);
75
+
73
76
  return this.stores.crowdloan.upsert({
74
77
  chain,
75
78
  address,
76
79
  ...item
77
80
  });
78
81
  } else {
79
- this.logger.debug(`Removing crowdloan for [${chain}]`);
82
+ // this.logger.debug(`Removing crowdloan for [${chain}]`);
83
+
80
84
  return this.stores.crowdloan.deleteByChainAndAddress(chain, address);
81
85
  }
82
86
  }
@@ -84,22 +88,23 @@ class DatabaseService {
84
88
  // Staking
85
89
  async updateStaking(chain, address, item) {
86
90
  if (item.state === _KoniTypes.APIItemState.READY) {
87
- this.logger.log(`Updating staking for [${chain}]`);
91
+ // this.logger.log(`Updating staking for [${chain}]`);
92
+
88
93
  return this.stores.staking.upsert(item);
89
94
  }
90
95
  }
91
96
  async getStakings(addresses, chains) {
92
- const stakings = await this.stores.staking.getStakings(addresses, chains);
93
- this.logger.log('Get Stakings: ', stakings);
94
- return stakings;
97
+ // this.logger.log('Get Stakings: ', stakings);
98
+
99
+ return this.stores.staking.getStakings(addresses, chains);
95
100
  }
96
101
  async getStakingsByChains(chains) {
97
102
  return this.stores.staking.getStakingsByChains(chains);
98
103
  }
99
104
  async getPooledStakings(addresses, chainHashes) {
100
- const stakings = await this.stores.staking.getPooledStakings(addresses, chainHashes);
101
- this.logger.log('Get Pooled Stakings: ', stakings);
102
- return stakings;
105
+ // this.logger.log('Get Pooled Stakings: ', stakings);
106
+
107
+ return this.stores.staking.getPooledStakings(addresses, chainHashes);
103
108
  }
104
109
  subscribeStaking(addresses, chainList, callback) {
105
110
  this.stakingSubscription && this.stakingSubscription.unsubscribe();
@@ -121,18 +126,18 @@ class DatabaseService {
121
126
 
122
127
  // Transaction histories
123
128
  async getHistories(query) {
124
- const histories = await this.stores.transaction.queryHistory(query);
125
- this.logger.log('Get histories: ', histories);
126
- return histories;
129
+ return this.stores.transaction.queryHistory(query);
127
130
  }
128
131
  async upsertHistory(histories) {
129
- this.logger.log('Updating transaction histories');
132
+ // this.logger.log('Updating transaction histories');
133
+
130
134
  return this.stores.transaction.bulkUpsert(histories);
131
135
  }
132
136
 
133
137
  // NFT Collection
134
138
  async addNftCollection(collection) {
135
- this.logger.log(`Updating NFT collection for [${collection.chain}]`);
139
+ // this.logger.log(`Updating NFT collection for [${collection.chain}]`);
140
+
136
141
  return this.stores.nftCollection.upsert(collection);
137
142
  }
138
143
  async deleteNftCollection(chain, collectionId) {
@@ -151,13 +156,19 @@ class DatabaseService {
151
156
  });
152
157
  return this.nftSubscription;
153
158
  }
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
+ }
154
164
  async getNft(addresses, chainHashes) {
155
- const nfts = await this.stores.nft.getNft(addresses, chainHashes);
156
- this.logger.log('Get NFTs: ', nfts);
157
- return nfts;
165
+ // this.logger.log('Get NFTs: ', nfts);
166
+
167
+ return this.stores.nft.getNft(addresses, chainHashes);
158
168
  }
159
169
  async addNft(address, nft) {
160
- this.logger.log(`Updating NFT for [${nft.chain}]`);
170
+ // this.logger.log(`Updating NFT for [${nft.chain}]`);
171
+
161
172
  return this.stores.nft.upsert({
162
173
  ...nft,
163
174
  address
@@ -167,47 +178,54 @@ class DatabaseService {
167
178
  return this.stores.nft.deleteNftItem(chain, addresses, nftItem);
168
179
  }
169
180
  removeNfts(chain, address, collectionId, nftIds) {
170
- this.logger.log(`Remove NFTs [${nftIds.join(', ')}]`);
181
+ // this.logger.log(`Remove NFTs [${nftIds.join(', ')}]`);
182
+
171
183
  return this.stores.nft.removeNfts(chain, address, collectionId, nftIds);
172
184
  }
173
185
 
174
186
  // Chain
175
187
  async updateChainStore(item) {
176
- this.logger.log(`Updating storageInfo for chain [${item.slug}]`);
188
+ // this.logger.log(`Updating storageInfo for chain [${item.slug}]`);
189
+
177
190
  return this.stores.chain.upsert(item);
178
191
  }
179
192
  async bulkUpdateChainStore(data) {
180
- this.logger.log('Bulk updating ChainStore');
193
+ // this.logger.log('Bulk updating ChainStore');
194
+
181
195
  return this.stores.chain.bulkUpsert(data);
182
196
  }
183
197
  async removeFromChainStore(chains) {
184
- this.logger.log('Bulk removing ChainStore');
198
+ // this.logger.log('Bulk removing ChainStore');
199
+
185
200
  return this.stores.chain.removeChains(chains);
186
201
  }
187
202
  async getAllChainStore() {
188
- const allChains = await this.stores.chain.getAll();
189
- this.logger.log('Get all chains: ', allChains);
190
- return allChains;
203
+ // this.logger.log('Get all chains: ', allChains);
204
+
205
+ return this.stores.chain.getAll();
191
206
  }
192
207
 
193
208
  // Asset
194
209
  async updateAssetStore(item) {
195
- this.logger.log(`Updating storageInfo for chainAsset [${item.originChain}]`);
210
+ // this.logger.log(`Updating storageInfo for chainAsset [${item.originChain}]`);
211
+
196
212
  return this.stores.asset.upsert(item);
197
213
  }
198
214
  async getAllAssetStore() {
199
- const allAssets = await this.stores.asset.getAll();
200
- this.logger.log('Get all stored assets: ', allAssets);
201
- return allAssets;
215
+ // this.logger.log('Get all stored assets: ', allAssets);
216
+
217
+ return this.stores.asset.getAll();
202
218
  }
203
219
  async removeFromAssetStore(items) {
204
- this.logger.log('Bulk removing AssetStore');
220
+ // this.logger.log('Bulk removing AssetStore');
221
+
205
222
  return this.stores.asset.removeAssets(items);
206
223
  }
207
224
 
208
225
  // Staking
209
226
  async updateChainStakingMetadata(item) {
210
- this.logger.log('Update ChainStakingMetadata: ', item.chain);
227
+ // this.logger.log('Update ChainStakingMetadata: ', item.chain);
228
+
211
229
  return this.stores.chainStakingMetadata.upsert(item);
212
230
  }
213
231
  async getChainStakingMetadata() {
@@ -218,7 +236,8 @@ class DatabaseService {
218
236
  return this.stores.chainStakingMetadata.getByChainAndType(chain, type);
219
237
  }
220
238
  async updateNominatorMetadata(item) {
221
- this.logger.log('Update NominatorMetadata: ', item.address, item.chain);
239
+ // this.logger.log('Update NominatorMetadata: ', item.address, item.chain);
240
+
222
241
  return this.stores.nominatorMetadata.upsert(item);
223
242
  }
224
243
  async getNominatorMetadata() {
@@ -24,25 +24,12 @@ 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
- 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) {
27
+ cleanUpNfts(chain, address, collectionId, nftIds) {
42
28
  return this.table.where({
43
29
  address,
44
- chain
45
- }).and(nft => !collectionIds.some(item => item === nft.collectionId));
30
+ chain,
31
+ collectionId
32
+ }).and(nft => !nftIds.includes(nft.id)).delete();
46
33
  }
47
34
  deleteNftByAddress(addresses) {
48
35
  return this.table.where('address').anyOfIgnoreCase(addresses).delete();
@@ -10,43 +10,28 @@ 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;
14
13
  for (let index = 0; index < eventLogs.length; index++) {
15
14
  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
- }
30
15
  const {
31
16
  decimals: nativeDecimals,
32
17
  symbol: nativeSymbol
33
18
  } = (0, _utils._getChainNativeTokenBasicInfo)(chainInfo);
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;
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;
38
23
  historyItem.fee = {
39
- value: (_record$event$data$3 = record.event.data[1]) === null || _record$event$data$3 === void 0 ? void 0 : _record$event$data$3.toString(),
24
+ value: (_record$event$data$2 = record.event.data[1]) === null || _record$event$data$2 === void 0 ? void 0 : _record$event$data$2.toString(),
40
25
  symbol: nativeSymbol,
41
26
  decimals: nativeDecimals
42
27
  };
43
28
  }
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;
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;
48
33
  historyItem.fee = {
49
- value: (_record$event$data$5 = record.event.data[2]) === null || _record$event$data$5 === void 0 ? void 0 : _record$event$data$5.toString(),
34
+ value: (_record$event$data$4 = record.event.data[2]) === null || _record$event$data$4 === void 0 ? void 0 : _record$event$data$4.toString(),
50
35
  symbol: nativeSymbol,
51
36
  decimals: nativeDecimals
52
37
  };
@@ -55,28 +40,15 @@ function parseXcmEventLogs(historyItem, eventLogs, chain, sendingTokenInfo, chai
55
40
  }
56
41
  }
57
42
  function parseTransferEventLogs(historyItem, eventLogs, chain, sendingTokenInfo, chainInfo) {
58
- let isFeeUseMainTokenSymbol = true;
59
43
  for (let index = 0; index < eventLogs.length; index++) {
60
44
  const record = eventLogs[index];
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) {
64
- var _record$event$data$6;
65
- historyItem.fee = {
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) {
45
+ if (['genshiro_testnet', 'genshiro', 'equilibrium_parachain'].includes(chain) && sendingTokenInfo) {
74
46
  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;
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()) {
49
+ var _record$event$data$6;
78
50
  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',
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',
80
52
  symbol: sendingTokenInfo.symbol,
81
53
  decimals: (0, _utils._getAssetDecimals)(sendingTokenInfo)
82
54
  };
@@ -87,13 +59,13 @@ function parseTransferEventLogs(historyItem, eventLogs, chain, sendingTokenInfo,
87
59
  decimals: nativeDecimals,
88
60
  symbol: nativeSymbol
89
61
  } = (0, _utils._getChainNativeTokenBasicInfo)(chainInfo);
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;
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;
94
66
  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
95
67
  historyItem.fee = {
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',
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',
97
69
  symbol: nativeSymbol,
98
70
  decimals: nativeDecimals
99
71
  };
@@ -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.getAccount(historyItem.to);
437
+ const toAccount = (historyItem === null || historyItem === void 0 ? void 0 : historyItem.to) && _uiKeyring.default.getPair(historyItem.to);
438
438
  if (toAccount) {
439
439
  return [historyItem, {
440
440
  ...historyItem,
441
- address: historyItem.to,
441
+ address: toAccount.address,
442
442
  direction: _KoniTypes.TransactionDirection.RECEIVED
443
443
  }];
444
444
  }
@@ -464,18 +464,27 @@ 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
- 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
- }
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);
479
488
  }
480
489
  }
481
490
  onSuccess(_ref2) {