@subwallet/extension-base 1.0.4-1 → 1.0.5-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/background/KoniTypes.d.ts +12 -1
  2. package/background/KoniTypes.js +1 -0
  3. package/background/errors/TransactionError.js +4 -0
  4. package/background/handlers/State.d.ts +1 -1
  5. package/background/handlers/State.js +2 -8
  6. package/background/handlers/subscriptions.js +0 -1
  7. package/background/types.d.ts +2 -2
  8. package/cjs/background/KoniTypes.js +1 -0
  9. package/cjs/background/errors/TransactionError.js +4 -0
  10. package/cjs/background/handlers/State.js +1 -7
  11. package/cjs/background/handlers/subscriptions.js +0 -1
  12. package/cjs/constants/index.js +6 -6
  13. package/cjs/koni/api/coingecko.js +1 -4
  14. package/cjs/koni/api/dotsama/balance.js +7 -5
  15. package/cjs/koni/api/dotsama/crowdloan.js +0 -4
  16. package/cjs/koni/api/dotsama/transfer.js +0 -4
  17. package/cjs/koni/api/nft/acala_nft/index.js +1 -1
  18. package/cjs/koni/api/nft/bit.country/index.js +1 -1
  19. package/cjs/koni/api/nft/evm_nft/index.js +2 -3
  20. package/cjs/koni/api/nft/index.js +1 -2
  21. package/cjs/koni/api/nft/karura_nft/index.js +1 -1
  22. package/cjs/koni/api/nft/quartz_nft/index.js +1 -1
  23. package/cjs/koni/api/nft/rmrk_nft/index.js +2 -3
  24. package/cjs/koni/api/nft/statemine_nft/index.js +1 -1
  25. package/cjs/koni/api/nft/transfer.js +5 -5
  26. package/cjs/koni/api/nft/unique_nft/index.js +1 -1
  27. package/cjs/koni/api/nft/unique_nft/uniqueNftV2.js +0 -1
  28. package/cjs/koni/api/nft/wasm_nft/index.js +1 -2
  29. package/cjs/koni/api/staking/bonding/astar.js +28 -12
  30. package/cjs/koni/api/staking/bonding/utils.js +4 -0
  31. package/cjs/koni/api/staking/relayChain.js +0 -1
  32. package/cjs/koni/api/staking/subsquidStaking.js +0 -2
  33. package/cjs/koni/api/tokens/wasm/index.js +0 -1
  34. package/cjs/koni/api/tokens/wasm/utils.js +0 -1
  35. package/cjs/koni/api/xcm/index.js +0 -1
  36. package/cjs/koni/background/cron.js +0 -45
  37. package/cjs/koni/background/handlers/Extension.js +163 -133
  38. package/cjs/koni/background/handlers/State.js +18 -3
  39. package/cjs/koni/background/handlers/Tabs.js +34 -2
  40. package/cjs/koni/background/handlers/index.js +3 -2
  41. package/cjs/koni/background/subscription.js +0 -26
  42. package/cjs/packageInfo.js +1 -1
  43. package/cjs/services/chain-service/handler/EvmChainHandler.js +1 -1
  44. package/cjs/services/chain-service/handler/SubstrateChainHandler.js +2 -9
  45. package/cjs/services/chain-service/handler/light-client/index.js +9 -6
  46. package/cjs/services/chain-service/index.js +0 -2
  47. package/cjs/services/chain-service/utils.js +3 -0
  48. package/cjs/services/history-service/helpers/recoverHistoryStatus.js +108 -0
  49. package/cjs/services/history-service/index.js +60 -5
  50. package/cjs/services/history-service/subsquid-multi-chain-history.js +3 -2
  51. package/cjs/services/history-service/testChainMap.js +724 -0
  52. package/cjs/services/keyring-service/index.js +0 -2
  53. package/cjs/services/migration-service/index.js +0 -3
  54. package/cjs/services/migration-service/scripts/MigrateAutoLock.js +30 -0
  55. package/cjs/services/migration-service/scripts/MigrateChainPatrol.js +30 -0
  56. package/cjs/services/migration-service/scripts/index.js +5 -1
  57. package/cjs/services/price-service/coingecko.js +1 -1
  58. package/cjs/services/price-service/index.js +0 -3
  59. package/cjs/services/request-service/handler/AuthRequestHandler.js +1 -1
  60. package/cjs/services/setting-service/constants.js +8 -2
  61. package/cjs/services/storage-service/DatabaseService.js +2 -44
  62. package/cjs/services/transaction-service/constants.js +11 -0
  63. package/cjs/services/transaction-service/index.js +28 -9
  64. package/cjs/services/transaction-service/utils.js +25 -14
  65. package/constants/index.d.ts +1 -1
  66. package/constants/index.js +1 -1
  67. package/koni/api/coingecko.js +1 -4
  68. package/koni/api/dotsama/balance.js +7 -5
  69. package/koni/api/dotsama/crowdloan.js +0 -4
  70. package/koni/api/dotsama/transfer.js +0 -4
  71. package/koni/api/nft/acala_nft/index.js +1 -1
  72. package/koni/api/nft/bit.country/index.js +1 -1
  73. package/koni/api/nft/evm_nft/index.js +2 -3
  74. package/koni/api/nft/index.js +1 -2
  75. package/koni/api/nft/karura_nft/index.js +1 -1
  76. package/koni/api/nft/quartz_nft/index.js +1 -1
  77. package/koni/api/nft/rmrk_nft/index.js +2 -3
  78. package/koni/api/nft/statemine_nft/index.js +1 -1
  79. package/koni/api/nft/transfer.js +5 -5
  80. package/koni/api/nft/unique_nft/index.js +1 -1
  81. package/koni/api/nft/unique_nft/uniqueNftV2.js +0 -1
  82. package/koni/api/nft/wasm_nft/index.js +1 -2
  83. package/koni/api/staking/bonding/astar.d.ts +2 -1
  84. package/koni/api/staking/bonding/astar.js +27 -12
  85. package/koni/api/staking/bonding/utils.js +4 -0
  86. package/koni/api/staking/relayChain.js +0 -1
  87. package/koni/api/staking/subsquidStaking.js +0 -2
  88. package/koni/api/tokens/wasm/index.js +0 -1
  89. package/koni/api/tokens/wasm/utils.js +0 -1
  90. package/koni/api/xcm/index.js +0 -1
  91. package/koni/background/cron.js +0 -45
  92. package/koni/background/handlers/Extension.d.ts +2 -0
  93. package/koni/background/handlers/Extension.js +78 -50
  94. package/koni/background/handlers/State.d.ts +3 -1
  95. package/koni/background/handlers/State.js +18 -3
  96. package/koni/background/handlers/Tabs.d.ts +1 -0
  97. package/koni/background/handlers/Tabs.js +32 -1
  98. package/koni/background/handlers/index.js +3 -2
  99. package/koni/background/subscription.d.ts +0 -1
  100. package/koni/background/subscription.js +0 -26
  101. package/package.json +55 -34
  102. package/packageInfo.js +1 -1
  103. package/services/chain-service/handler/EvmChainHandler.js +1 -1
  104. package/services/chain-service/handler/SubstrateChainHandler.js +2 -9
  105. package/services/chain-service/handler/light-client/index.js +8 -6
  106. package/services/chain-service/helper/api-helper/spec/acala.d.ts +3 -3
  107. package/services/chain-service/index.js +0 -2
  108. package/services/chain-service/utils.js +3 -0
  109. package/services/history-service/helpers/recoverHistoryStatus.d.ts +11 -0
  110. package/services/history-service/helpers/recoverHistoryStatus.js +98 -0
  111. package/services/history-service/index.d.ts +6 -0
  112. package/services/history-service/index.js +61 -6
  113. package/services/history-service/subsquid-multi-chain-history.js +3 -2
  114. package/services/history-service/testChainMap.d.ts +3 -0
  115. package/services/history-service/testChainMap.js +716 -0
  116. package/services/keyring-service/index.js +0 -2
  117. package/services/migration-service/index.js +0 -3
  118. package/services/migration-service/scripts/MigrateAutoLock.d.ts +4 -0
  119. package/services/migration-service/scripts/MigrateAutoLock.js +22 -0
  120. package/services/migration-service/scripts/MigrateChainPatrol.d.ts +4 -0
  121. package/services/migration-service/scripts/MigrateChainPatrol.js +22 -0
  122. package/services/migration-service/scripts/index.js +5 -1
  123. package/services/price-service/coingecko.js +1 -1
  124. package/services/price-service/index.js +0 -3
  125. package/services/request-service/handler/AuthRequestHandler.js +1 -1
  126. package/services/setting-service/constants.d.ts +4 -2
  127. package/services/setting-service/constants.js +5 -1
  128. package/services/storage-service/DatabaseService.js +2 -44
  129. package/services/transaction-service/constants.d.ts +1 -0
  130. package/services/transaction-service/constants.js +4 -0
  131. package/services/transaction-service/index.d.ts +1 -0
  132. package/services/transaction-service/index.js +29 -10
  133. package/services/transaction-service/utils.d.ts +1 -1
  134. package/services/transaction-service/utils.js +24 -13
@@ -47,7 +47,6 @@ class KeyringService {
47
47
 
48
48
  // Remove account
49
49
  removedAddresses.forEach(address => {
50
- console.log('account.remove', address);
51
50
  this.eventService.emit('account.remove', address);
52
51
  });
53
52
  } else if (beforeAddresses.length < afterAddresses.length) {
@@ -55,7 +54,6 @@ class KeyringService {
55
54
 
56
55
  // Add account
57
56
  addedAddresses.forEach(address => {
58
- console.log('account.add', address);
59
57
  this.eventService.emit('account.add', address);
60
58
  });
61
59
  } else {
@@ -17,7 +17,6 @@ class MigrationService {
17
17
  this.logger = (0, _util.logger)('Migration');
18
18
  }
19
19
  async run() {
20
- this.logger.log('Migrating...');
21
20
  const keys = Object.keys(_scripts.default).sort((a, b) => a.localeCompare(b));
22
21
 
23
22
  // Await timeout 2s
@@ -32,7 +31,6 @@ class MigrationService {
32
31
  key
33
32
  }).first();
34
33
  if (!check || key.startsWith(_scripts.EVERYTIME)) {
35
- this.logger.log('Running script: ', JobClass.name);
36
34
  const job = new JobClass(this.state);
37
35
  await job.run();
38
36
  await this.state.dbService.stores.migration.table.put({
@@ -45,7 +43,6 @@ class MigrationService {
45
43
  this.logger.error('Migration error: ', _scripts.default[keys[i]].name, error);
46
44
  }
47
45
  }
48
- this.logger.log('Migration done.');
49
46
  }
50
47
  }
51
48
  exports.default = MigrationService;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
9
+ var _constants = require("@subwallet/extension-base/services/setting-service/constants");
10
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
11
+ // SPDX-License-Identifier: Apache-2.0
12
+
13
+ class MigrateAutoLock extends _Base.default {
14
+ async run() {
15
+ try {
16
+ return new Promise(resolve => {
17
+ this.state.settingService.getSettings(currentSettings => {
18
+ this.state.settingService.setSettings({
19
+ ...currentSettings,
20
+ timeAutoLock: _constants.DEFAULT_AUTO_LOCK_TIME
21
+ });
22
+ resolve();
23
+ });
24
+ });
25
+ } catch (e) {
26
+ console.error(e);
27
+ }
28
+ }
29
+ }
30
+ exports.default = MigrateAutoLock;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
9
+ var _constants = require("@subwallet/extension-base/services/setting-service/constants");
10
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
11
+ // SPDX-License-Identifier: Apache-2.0
12
+
13
+ class MigrateChainPatrol extends _Base.default {
14
+ async run() {
15
+ try {
16
+ return new Promise(resolve => {
17
+ this.state.settingService.getSettings(currentSettings => {
18
+ this.state.settingService.setSettings({
19
+ ...currentSettings,
20
+ enableChainPatrol: _constants.DEFAULT_CHAIN_PATROL_ENABLE
21
+ });
22
+ resolve();
23
+ });
24
+ });
25
+ } catch (e) {
26
+ console.error(e);
27
+ }
28
+ }
29
+ }
30
+ exports.default = MigrateChainPatrol;
@@ -7,6 +7,8 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.default = exports.EVERYTIME = void 0;
8
8
  var _AutoEnableChainsTokens = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/AutoEnableChainsTokens"));
9
9
  var _MigrateAuthUrls = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateAuthUrls"));
10
+ var _MigrateAutoLock = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateAutoLock"));
11
+ var _MigrateChainPatrol = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateChainPatrol"));
10
12
  var _MigrateImportedToken = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateImportedToken"));
11
13
  var _MigrateNetworkSettings = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateNetworkSettings"));
12
14
  var _MigrateSettings = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateSettings"));
@@ -22,7 +24,9 @@ var _default = {
22
24
  '1.0.1-30': _MigrateTransactionHistory.default,
23
25
  '1.0.1-40': _AutoEnableChainsTokens.default,
24
26
  '1.0.1-50': _MigrateSettings.default,
25
- '1.0.1-60': _MigrateAuthUrls.default
27
+ '1.0.1-60': _MigrateAuthUrls.default,
28
+ '1.0.3-01': _MigrateAutoLock.default,
29
+ '1.0.3-02': _MigrateChainPatrol.default
26
30
  // [`${EVERYTIME}-1`]: AutoEnableChainsTokens
27
31
  };
28
32
  exports.default = _default;
@@ -45,7 +45,7 @@ const getTokenPrice = async function (priceIds) {
45
45
  price24hMap
46
46
  };
47
47
  } catch (err) {
48
- console.error('Failed to get token price', err);
48
+ console.error(err);
49
49
  throw err;
50
50
  }
51
51
  };
@@ -40,7 +40,6 @@ class PriceService {
40
40
  }
41
41
  refreshPriceData(priceIds) {
42
42
  clearTimeout(this.refreshTimeout);
43
- console.log('Refresh Price Data');
44
43
  this.priceIds = priceIds || this.getPriceIds();
45
44
 
46
45
  // Update for tokens price
@@ -79,7 +78,6 @@ class PriceService {
79
78
  }
80
79
  startPromiseHandler = (0, _promise.createPromiseHandler)();
81
80
  async start() {
82
- console.debug('Start price service');
83
81
  try {
84
82
  this.startPromiseHandler = (0, _promise.createPromiseHandler)();
85
83
  this.status = _types.ServiceStatus.STARTING;
@@ -96,7 +94,6 @@ class PriceService {
96
94
  }
97
95
  stopPromiseHandler = (0, _promise.createPromiseHandler)();
98
96
  async stop() {
99
- console.debug('Stop price service');
100
97
  try {
101
98
  this.status = _types.ServiceStatus.STOPPING;
102
99
  this.stopPromiseHandler = (0, _promise.createPromiseHandler)();
@@ -79,7 +79,7 @@ class AuthRequestHandler {
79
79
  update(this.authorizeCached);
80
80
  } else {
81
81
  this.authorizeStore.get('authUrls', data => {
82
- this.authorizeCached = data;
82
+ this.authorizeCached = data || {};
83
83
  update(this.authorizeCached);
84
84
  });
85
85
  }
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.DEFAULT_THEME = exports.DEFAULT_SETTING = exports.DEFAULT_NOTIFICATION_TYPE = void 0;
6
+ exports.DEFAULT_THEME = exports.DEFAULT_SETTING = exports.DEFAULT_NOTIFICATION_TYPE = exports.DEFAULT_CHAIN_PATROL_ENABLE = exports.DEFAULT_AUTO_LOCK_TIME = void 0;
7
7
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
8
8
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
9
9
  // SPDX-License-Identifier: Apache-2.0
@@ -12,6 +12,10 @@ const DEFAULT_THEME = _KoniTypes.ThemeNames.DARK;
12
12
  exports.DEFAULT_THEME = DEFAULT_THEME;
13
13
  const DEFAULT_NOTIFICATION_TYPE = 'popup';
14
14
  exports.DEFAULT_NOTIFICATION_TYPE = DEFAULT_NOTIFICATION_TYPE;
15
+ const DEFAULT_AUTO_LOCK_TIME = 15;
16
+ exports.DEFAULT_AUTO_LOCK_TIME = DEFAULT_AUTO_LOCK_TIME;
17
+ const DEFAULT_CHAIN_PATROL_ENABLE = false;
18
+ exports.DEFAULT_CHAIN_PATROL_ENABLE = DEFAULT_CHAIN_PATROL_ENABLE;
15
19
  const DEFAULT_SETTING = {
16
20
  // language: 'en',
17
21
  browserConfirmationType: DEFAULT_NOTIFICATION_TYPE,
@@ -19,6 +23,8 @@ const DEFAULT_SETTING = {
19
23
  isShowBalance: false,
20
24
  accountAllLogo: '',
21
25
  theme: DEFAULT_THEME,
22
- camera: false
26
+ camera: false,
27
+ timeAutoLock: DEFAULT_AUTO_LOCK_TIME,
28
+ enableChainPatrol: DEFAULT_CHAIN_PATROL_ENABLE
23
29
  };
24
30
  exports.DEFAULT_SETTING = DEFAULT_SETTING;
@@ -45,6 +45,7 @@ class DatabaseService {
45
45
  const rs = await this.stores.price.table.get('usd');
46
46
  return rs;
47
47
  } catch (e) {
48
+ this.logger.error(e);
48
49
  return undefined;
49
50
  }
50
51
  }
@@ -55,8 +56,6 @@ class DatabaseService {
55
56
  }
56
57
  async updateBalanceStore(address, item) {
57
58
  if (item.state === _KoniTypes.APIItemState.READY) {
58
- // this.logger.log(`Updating balance for [${item.tokenSlug}]`);
59
-
60
59
  return this.stores.balance.upsert({
61
60
  address,
62
61
  ...item
@@ -64,23 +63,18 @@ class DatabaseService {
64
63
  }
65
64
  }
66
65
  async removeFromBalanceStore(assets) {
67
- this.logger.log('Bulk removing AssetStore');
68
66
  return this.stores.balance.removeBySlugs(assets);
69
67
  }
70
68
 
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
-
76
72
  return this.stores.crowdloan.upsert({
77
73
  chain,
78
74
  address,
79
75
  ...item
80
76
  });
81
77
  } else {
82
- // this.logger.debug(`Removing crowdloan for [${chain}]`);
83
-
84
78
  return this.stores.crowdloan.deleteByChainAndAddress(chain, address);
85
79
  }
86
80
  }
@@ -88,22 +82,16 @@ class DatabaseService {
88
82
  // Staking
89
83
  async updateStaking(chain, address, item) {
90
84
  if (item.state === _KoniTypes.APIItemState.READY) {
91
- // this.logger.log(`Updating staking for [${chain}]`);
92
-
93
85
  return this.stores.staking.upsert(item);
94
86
  }
95
87
  }
96
88
  async getStakings(addresses, chains) {
97
- // this.logger.log('Get Stakings: ', stakings);
98
-
99
89
  return this.stores.staking.getStakings(addresses, chains);
100
90
  }
101
91
  async getStakingsByChains(chains) {
102
92
  return this.stores.staking.getStakingsByChains(chains);
103
93
  }
104
94
  async getPooledStakings(addresses, chainHashes) {
105
- // this.logger.log('Get Pooled Stakings: ', stakings);
106
-
107
95
  return this.stores.staking.getPooledStakings(addresses, chainHashes);
108
96
  }
109
97
  subscribeStaking(addresses, chainList, callback) {
@@ -129,12 +117,10 @@ class DatabaseService {
129
117
  return this.stores.transaction.queryHistory(query);
130
118
  }
131
119
  async upsertHistory(histories) {
132
- // this.logger.log('Updating transaction histories');
133
120
  const cleanedHistory = histories.filter(x => x && x.address && x.chain && x.extrinsicHash);
134
121
  return this.stores.transaction.bulkUpsert(cleanedHistory);
135
122
  }
136
123
  async updateHistoryByNewExtrinsicHash(extrinsicHash, updateData) {
137
- // this.logger.log('Updating transaction histories');
138
124
  const canUpdate = updateData && extrinsicHash;
139
125
  if (!canUpdate) {
140
126
  return;
@@ -146,8 +132,6 @@ class DatabaseService {
146
132
 
147
133
  // NFT Collection
148
134
  async addNftCollection(collection) {
149
- // this.logger.log(`Updating NFT collection for [${collection.chain}]`);
150
-
151
135
  return this.stores.nftCollection.upsert(collection);
152
136
  }
153
137
  async deleteNftCollection(chain, collectionId) {
@@ -170,18 +154,12 @@ class DatabaseService {
170
154
  if (ownNothing) {
171
155
  return this.stores.nft.deleteNftsByChainAndOwner(chain, (0, _utils.reformatAddress)(owner, 42));
172
156
  }
173
- const result = await this.stores.nft.cleanUpNfts(chain, (0, _utils.reformatAddress)(owner, 42), collectionIds, nftIds);
174
- result > 0 && console.debug(`Cleaned up ${result} NFTs on chain ${chain} for owner ${(0, _utils.reformatAddress)(owner, 42)}`, collectionIds, nftIds);
175
- return result;
157
+ return this.stores.nft.cleanUpNfts(chain, (0, _utils.reformatAddress)(owner, 42), collectionIds, nftIds);
176
158
  }
177
159
  async getNft(addresses, chainHashes) {
178
- // this.logger.log('Get NFTs: ', nfts);
179
-
180
160
  return this.stores.nft.getNft(addresses, chainHashes);
181
161
  }
182
162
  async addNft(address, nft) {
183
- // this.logger.log(`Updating NFT for [${nft.chain}]`);
184
-
185
163
  return this.stores.nft.upsert({
186
164
  ...nft,
187
165
  address
@@ -191,54 +169,36 @@ class DatabaseService {
191
169
  return this.stores.nft.deleteNftItem(chain, addresses, nftItem);
192
170
  }
193
171
  removeNfts(chain, address, collectionId, nftIds) {
194
- // this.logger.log(`Remove NFTs [${nftIds.join(', ')}]`);
195
-
196
172
  return this.stores.nft.removeNfts(chain, address, collectionId, nftIds);
197
173
  }
198
174
 
199
175
  // Chain
200
176
  async updateChainStore(item) {
201
- // this.logger.log(`Updating storageInfo for chain [${item.slug}]`);
202
-
203
177
  return this.stores.chain.upsert(item);
204
178
  }
205
179
  async bulkUpdateChainStore(data) {
206
- // this.logger.log('Bulk updating ChainStore');
207
-
208
180
  return this.stores.chain.bulkUpsert(data);
209
181
  }
210
182
  async removeFromChainStore(chains) {
211
- // this.logger.log('Bulk removing ChainStore');
212
-
213
183
  return this.stores.chain.removeChains(chains);
214
184
  }
215
185
  async getAllChainStore() {
216
- // this.logger.log('Get all chains: ', allChains);
217
-
218
186
  return this.stores.chain.getAll();
219
187
  }
220
188
 
221
189
  // Asset
222
190
  async updateAssetStore(item) {
223
- // this.logger.log(`Updating storageInfo for chainAsset [${item.originChain}]`);
224
-
225
191
  return this.stores.asset.upsert(item);
226
192
  }
227
193
  async getAllAssetStore() {
228
- // this.logger.log('Get all stored assets: ', allAssets);
229
-
230
194
  return this.stores.asset.getAll();
231
195
  }
232
196
  async removeFromAssetStore(items) {
233
- // this.logger.log('Bulk removing AssetStore');
234
-
235
197
  return this.stores.asset.removeAssets(items);
236
198
  }
237
199
 
238
200
  // Staking
239
201
  async updateChainStakingMetadata(item) {
240
- // this.logger.log('Update ChainStakingMetadata: ', item.chain);
241
-
242
202
  return this.stores.chainStakingMetadata.upsert(item);
243
203
  }
244
204
  async getChainStakingMetadata() {
@@ -249,8 +209,6 @@ class DatabaseService {
249
209
  return this.stores.chainStakingMetadata.getByChainAndType(chain, type);
250
210
  }
251
211
  async updateNominatorMetadata(item) {
252
- // this.logger.log('Update NominatorMetadata: ', item.address, item.chain);
253
-
254
212
  return this.stores.nominatorMetadata.upsert(item);
255
213
  }
256
214
  async getNominatorMetadata() {
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.TRANSACTION_TIMEOUT = void 0;
7
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
8
+ // SPDX-License-Identifier: Apache-2.0
9
+
10
+ const TRANSACTION_TIMEOUT = 2 * 60 * 1000;
11
+ exports.TRANSACTION_TIMEOUT = TRANSACTION_TIMEOUT;
@@ -12,6 +12,7 @@ var _TransactionWarning = require("@subwallet/extension-base/background/warnings
12
12
  var _constants = require("@subwallet/extension-base/constants");
13
13
  var _utils = require("@subwallet/extension-base/services/chain-service/utils");
14
14
  var _constants2 = require("@subwallet/extension-base/services/request-service/constants");
15
+ var _constants3 = require("@subwallet/extension-base/services/transaction-service/constants");
15
16
  var _eventParser = require("@subwallet/extension-base/services/transaction-service/event-parser");
16
17
  var _helpers = require("@subwallet/extension-base/services/transaction-service/helpers");
17
18
  var _utils2 = require("@subwallet/extension-base/services/transaction-service/utils");
@@ -276,7 +277,7 @@ class TransactionService {
276
277
  getTransactionLink(id) {
277
278
  const transaction = this.getTransaction(id);
278
279
  const chainInfo = this.chainService.getChainInfoByKey(transaction.chain);
279
- return (0, _utils2.getTransactionLink)(chainInfo, transaction.extrinsicHash);
280
+ return (0, _utils2.getExplorerLink)(chainInfo, transaction.extrinsicHash, 'tx');
280
281
  }
281
282
  transactionToHistories(id, eventLogs) {
282
283
  const transaction = this.getTransaction(id);
@@ -463,7 +464,7 @@ class TransactionService {
463
464
  let {
464
465
  id
465
466
  } = _ref;
466
- console.log(`Transaction "${id}" is signed`);
467
+ console.debug(`Transaction "${id}" is signed`);
467
468
  }
468
469
  onSend(_ref2) {
469
470
  let {
@@ -476,23 +477,25 @@ class TransactionService {
476
477
 
477
478
  // Create Input History Transaction History
478
479
  this.historyService.insertHistories(this.transactionToHistories(id)).catch(console.error);
479
- console.log(`Transaction "${id}" is sent`);
480
+ console.debug(`Transaction "${id}" is sent`);
480
481
  }
481
482
  onHasTransactionHash(_ref3) {
482
483
  let {
484
+ blockHash,
483
485
  extrinsicHash,
484
486
  id
485
487
  } = _ref3;
486
488
  // Write processing transaction history
487
489
  const updateData = {
488
490
  extrinsicHash,
489
- status: _KoniTypes.ExtrinsicStatus.PROCESSING
491
+ status: _KoniTypes.ExtrinsicStatus.PROCESSING,
492
+ blockHash: blockHash || ''
490
493
  };
491
494
  this.updateTransaction(id, updateData);
492
495
 
493
496
  // In this case transaction id is the same as extrinsic hash and will change after below update
494
497
  this.historyService.updateHistoryByExtrinsicHash(id, updateData).catch(console.error);
495
- console.log(`Transaction "${id}" is submitted with hash ${extrinsicHash || ''}`);
498
+ console.debug(`Transaction "${id}" is submitted with hash ${extrinsicHash || ''}`);
496
499
  }
497
500
  handlePostProcessing(id) {
498
501
  // must be done after success/failure to make sure the transaction is finalized
@@ -530,7 +533,6 @@ class TransactionService {
530
533
  this.updateTransaction(id, {
531
534
  status: _KoniTypes.ExtrinsicStatus.SUCCESS
532
535
  });
533
- console.log('Transaction completed', id, transaction.extrinsicHash);
534
536
 
535
537
  // Write success transaction history
536
538
  this.historyService.updateHistories(transaction.chain, transaction.extrinsicHash, {
@@ -563,7 +565,6 @@ class TransactionService {
563
565
  status: nextStatus,
564
566
  errors
565
567
  });
566
- console.log('Transaction failed', id, transaction.extrinsicHash);
567
568
 
568
569
  // Write failed transaction history
569
570
  this.historyService.updateHistories(transaction.chain, transaction.extrinsicHash, {
@@ -582,8 +583,6 @@ class TransactionService {
582
583
  });
583
584
  }
584
585
  this.eventService.emit('transaction.failed', transaction);
585
- // Log transaction errors
586
- console.error(errors);
587
586
  }
588
587
  generateHashPayload(chain, transaction) {
589
588
  const chainInfo = this.chainService.getChainInfoByKey(chain);
@@ -694,6 +693,7 @@ class TransactionService {
694
693
  emitter.emit('signed', eventData);
695
694
 
696
695
  // Send transaction
696
+ this.handleTransactionTimeout(emitter, eventData);
697
697
  emitter.emit('send', eventData); // This event is needed after sending transaction with queue
698
698
  signedTransaction && web3Api.eth.sendSignedTransaction(signedTransaction).once('transactionHash', hash => {
699
699
  eventData.extrinsicHash = hash;
@@ -749,7 +749,9 @@ class TransactionService {
749
749
  emitter.emit('signed', eventData);
750
750
 
751
751
  // Send transaction
752
+ this.handleTransactionTimeout(emitter, eventData);
752
753
  emitter.emit('send', eventData); // This event is needed after sending transaction with queue
754
+
753
755
  rs.send(txState => {
754
756
  // handle events, logs, history
755
757
  if (!txState || !txState.status) {
@@ -759,6 +761,7 @@ class TransactionService {
759
761
  eventData.eventLogs = txState.events;
760
762
  if (!eventData.extrinsicHash || eventData.extrinsicHash === '') {
761
763
  eventData.extrinsicHash = txState.txHash.toHex();
764
+ eventData.blockHash = txState.status.asInBlock.toHex();
762
765
  emitter.emit('extrinsicHash', eventData);
763
766
  }
764
767
  }
@@ -798,6 +801,22 @@ class TransactionService {
798
801
  });
799
802
  return emitter;
800
803
  }
804
+ handleTransactionTimeout(emitter, eventData) {
805
+ const timeout = setTimeout(() => {
806
+ const transaction = this.getTransaction(eventData.id);
807
+ if (transaction.status !== _KoniTypes.ExtrinsicStatus.SUCCESS && transaction.status !== _KoniTypes.ExtrinsicStatus.FAIL) {
808
+ eventData.errors.push(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.TIMEOUT, 'Transaction timeout'));
809
+ emitter.emit('error', eventData);
810
+ clearTimeout(timeout);
811
+ }
812
+ }, _constants3.TRANSACTION_TIMEOUT);
813
+ emitter.once('success', () => {
814
+ clearTimeout(timeout);
815
+ });
816
+ emitter.once('error', () => {
817
+ clearTimeout(timeout);
818
+ });
819
+ }
801
820
  resetWallet() {
802
821
  this.transactionSubject.next({});
803
822
  }
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getTransactionLink = getTransactionLink;
6
+ exports.getExplorerLink = getExplorerLink;
7
7
  exports.parseTransactionData = parseTransactionData;
8
8
  var _utils = require("@subwallet/extension-base/services/chain-service/utils");
9
9
  // Copyright 2019-2022 @subwallet/extension-base authors & contributors
@@ -14,19 +14,30 @@ function parseTransactionData(data) {
14
14
  // eslint-disable-next-line @typescript-eslint/no-unsafe-return
15
15
  return data;
16
16
  }
17
- function getTransactionLink(chainInfo, extrinsicHash) {
18
- if (extrinsicHash.startsWith('0x')) {
19
- const explorerLink = (0, _utils._getBlockExplorerFromChain)(chainInfo);
20
- if ((0, _utils._isPureEvmChain)(chainInfo)) {
21
- if (explorerLink) {
22
- return `${explorerLink}${explorerLink.endsWith('/') ? '' : '/'}tx/${extrinsicHash}`;
23
- }
24
- } else {
25
- const explorerLink = (0, _utils._getBlockExplorerFromChain)(chainInfo);
26
- if (explorerLink) {
27
- return `${explorerLink}${explorerLink.endsWith('/') ? '' : '/'}extrinsic/${extrinsicHash}`;
28
- }
29
- }
17
+ function getBlockExplorerAccountRoute(explorerLink) {
18
+ if (explorerLink.includes('explorer.subspace.network')) {
19
+ return 'accounts';
20
+ }
21
+ if (explorerLink.includes('subscan.io')) {
22
+ return 'account';
23
+ }
24
+ return 'address';
25
+ }
26
+ function getBlockExplorerTxRoute(chainInfo) {
27
+ if ((0, _utils._isPureEvmChain)(chainInfo)) {
28
+ return 'tx';
29
+ }
30
+ return 'extrinsic';
31
+ }
32
+ function getExplorerLink(chainInfo, value, type) {
33
+ const explorerLink = (0, _utils._getBlockExplorerFromChain)(chainInfo);
34
+ if (explorerLink && type === 'account') {
35
+ const route = getBlockExplorerAccountRoute(explorerLink);
36
+ return `${explorerLink}${explorerLink.endsWith('/') ? '' : '/'}${route}/${value}`;
37
+ }
38
+ if (explorerLink && value.startsWith('0x')) {
39
+ const route = getBlockExplorerTxRoute(chainInfo);
40
+ return `${explorerLink}${explorerLink.endsWith('/') ? '' : '/'}${route}/${value}`;
30
41
  }
31
42
  return undefined;
32
43
  }
@@ -11,10 +11,10 @@ export declare const CRON_REFRESH_HISTORY_INTERVAL = 900000;
11
11
  export declare const CRON_GET_API_MAP_STATUS = 10000;
12
12
  export declare const CRON_REFRESH_CHAIN_STAKING_METADATA = 900000;
13
13
  export declare const CRON_REFRESH_CHAIN_NOMINATOR_METADATA = 1800000;
14
+ export declare const CRON_RECOVER_HISTORY_INTERVAL = 30000;
14
15
  export declare const ALL_ACCOUNT_KEY = "ALL";
15
16
  export declare const ALL_NETWORK_KEY = "all";
16
17
  export declare const ALL_GENESIS_HASH: null;
17
18
  export declare const IGNORE_GET_SUBSTRATE_FEATURES_LIST: string[];
18
19
  export declare const IGNORE_QR_SIGNER: string[];
19
- export declare const DEFAULT_TIME_AUTO_LOCK: number;
20
20
  export * from './staking';
@@ -14,10 +14,10 @@ export const CRON_REFRESH_HISTORY_INTERVAL = 900000;
14
14
  export const CRON_GET_API_MAP_STATUS = 10000;
15
15
  export const CRON_REFRESH_CHAIN_STAKING_METADATA = 900000;
16
16
  export const CRON_REFRESH_CHAIN_NOMINATOR_METADATA = 1800000;
17
+ export const CRON_RECOVER_HISTORY_INTERVAL = 30000;
17
18
  export const ALL_ACCOUNT_KEY = 'ALL';
18
19
  export const ALL_NETWORK_KEY = 'all';
19
20
  export const ALL_GENESIS_HASH = null;
20
21
  export const IGNORE_GET_SUBSTRATE_FEATURES_LIST = ['astarEvm', 'ethereum', 'ethereum_goerli', 'binance', 'binance_test', 'boba_rinkeby', 'boba', 'bobabase', 'bobabeam'];
21
22
  export const IGNORE_QR_SIGNER = [];
22
- export const DEFAULT_TIME_AUTO_LOCK = 15 * 60 * 1000;
23
23
  export * from "./staking.js";
@@ -7,9 +7,6 @@ export const getTokenPrice = async (priceIds, currency = 'usd') => {
7
7
  // const inverseMap: Record<string, string> = {};
8
8
  const idStr = priceIds.join(',');
9
9
  const res = await axios.get(`https://api.coingecko.com/api/v3/coins/markets?vs_currency=${currency}&per_page=1000&ids=${idStr}`);
10
- if (res.status !== 200) {
11
- console.warn('Failed to get token price');
12
- }
13
10
  const responseData = res.data;
14
11
  const priceMap = {};
15
12
  const price24hMap = {};
@@ -31,7 +28,7 @@ export const getTokenPrice = async (priceIds, currency = 'usd') => {
31
28
  price24hMap
32
29
  };
33
30
  } catch (err) {
34
- console.error('Failed to get token price', err);
31
+ console.error(err);
35
32
  throw err;
36
33
  }
37
34
  };
@@ -109,11 +109,13 @@ async function subscribeWithSystemAccountPallet(addresses, chainInfo, networkAPI
109
109
  }
110
110
  }
111
111
  balances.forEach(balance => {
112
- var _balance$data, _balance$data$free, _balance$data2, _balance$data2$reserv, _balance$data3, _balance$data3$miscFr, _balance$data4, _balance$data4$feeFro;
112
+ var _balance$data, _balance$data$free, _balance$data2, _balance$data2$reserv, _balance$data3, _balance$data3$miscFr, _balance$data4, _balance$data4$frozen, _balance$data5, _balance$data5$feeFro;
113
113
  total = total.add(((_balance$data = balance.data) === null || _balance$data === void 0 ? void 0 : (_balance$data$free = _balance$data.free) === null || _balance$data$free === void 0 ? void 0 : _balance$data$free.toBn()) || new BN(0)); // reserved is seperated
114
114
  reserved = reserved.add(((_balance$data2 = balance.data) === null || _balance$data2 === void 0 ? void 0 : (_balance$data2$reserv = _balance$data2.reserved) === null || _balance$data2$reserv === void 0 ? void 0 : _balance$data2$reserv.toBn()) || new BN(0));
115
- miscFrozen = miscFrozen.add(((_balance$data3 = balance.data) === null || _balance$data3 === void 0 ? void 0 : (_balance$data3$miscFr = _balance$data3.miscFrozen) === null || _balance$data3$miscFr === void 0 ? void 0 : _balance$data3$miscFr.toBn()) || new BN(0));
116
- feeFrozen = feeFrozen.add(((_balance$data4 = balance.data) === null || _balance$data4 === void 0 ? void 0 : (_balance$data4$feeFro = _balance$data4.feeFrozen) === null || _balance$data4$feeFro === void 0 ? void 0 : _balance$data4$feeFro.toBn()) || new BN(0));
115
+ // @ts-ignore
116
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
117
+ miscFrozen = miscFrozen.add(((_balance$data3 = balance.data) === null || _balance$data3 === void 0 ? void 0 : (_balance$data3$miscFr = _balance$data3.miscFrozen) === null || _balance$data3$miscFr === void 0 ? void 0 : _balance$data3$miscFr.toBn()) || (balance === null || balance === void 0 ? void 0 : (_balance$data4 = balance.data) === null || _balance$data4 === void 0 ? void 0 : (_balance$data4$frozen = _balance$data4.frozen) === null || _balance$data4$frozen === void 0 ? void 0 : _balance$data4$frozen.toBn()) || new BN(0)); // TODO: update frozen
118
+ feeFrozen = feeFrozen.add(((_balance$data5 = balance.data) === null || _balance$data5 === void 0 ? void 0 : (_balance$data5$feeFro = _balance$data5.feeFrozen) === null || _balance$data5$feeFro === void 0 ? void 0 : _balance$data5$feeFro.toBn()) || new BN(0));
117
119
  });
118
120
  let locked = reserved.add(miscFrozen);
119
121
  total = total.add(reserved); // total = free + reserved
@@ -159,7 +161,7 @@ function subscribeERC20Interval(addresses, chain, evmApiMap, callBack) {
159
161
  state: APIItemState.READY
160
162
  });
161
163
  } catch (err) {
162
- console.log('There is a problem fetching ' + tokenInfo.slug + ' token balance', err);
164
+ console.log(tokenInfo.slug, err);
163
165
  }
164
166
  });
165
167
  };
@@ -197,7 +199,7 @@ function subscribePSP22Balance(addresses, chain, api, callBack) {
197
199
  state: APIItemState.READY
198
200
  });
199
201
  } catch (err) {
200
- console.warn('Problem fetching ' + tokenInfo.slug + ' PSP-22 token balance', err); // TODO: error createType
202
+ console.warn(tokenInfo.slug, err); // TODO: error createType
201
203
  }
202
204
  });
203
205
  };
@@ -37,10 +37,6 @@ export const subscribeAcalaContributeInterval = (polkadotAddresses, paraState, c
37
37
  let contribute = new BN(0);
38
38
  resList.forEach(res => {
39
39
  var _res$data$data, _res$data$data$acala, _res$data$data$acala$;
40
- if (res.status !== 200) {
41
- console.warn('Failed to get Acala, Karura crowdloan contribute');
42
- }
43
-
44
40
  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-argument
45
41
  contribute = contribute.add(new BN(((_res$data$data = res.data.data) === null || _res$data$data === void 0 ? void 0 : (_res$data$data$acala = _res$data$data.acala) === null || _res$data$data$acala === void 0 ? void 0 : (_res$data$data$acala$ = _res$data$data$acala[0]) === null || _res$data$data$acala$ === void 0 ? void 0 : _res$data$data$acala$.totalDOTLocked) || '0'));
46
42
  });