@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.
- package/background/KoniTypes.d.ts +12 -1
- package/background/KoniTypes.js +1 -0
- package/background/errors/TransactionError.js +4 -0
- package/background/handlers/State.d.ts +1 -1
- package/background/handlers/State.js +2 -8
- package/background/handlers/subscriptions.js +0 -1
- package/background/types.d.ts +2 -2
- package/cjs/background/KoniTypes.js +1 -0
- package/cjs/background/errors/TransactionError.js +4 -0
- package/cjs/background/handlers/State.js +1 -7
- package/cjs/background/handlers/subscriptions.js +0 -1
- package/cjs/constants/index.js +6 -6
- package/cjs/koni/api/coingecko.js +1 -4
- package/cjs/koni/api/dotsama/balance.js +7 -5
- package/cjs/koni/api/dotsama/crowdloan.js +0 -4
- package/cjs/koni/api/dotsama/transfer.js +0 -4
- package/cjs/koni/api/nft/acala_nft/index.js +1 -1
- package/cjs/koni/api/nft/bit.country/index.js +1 -1
- package/cjs/koni/api/nft/evm_nft/index.js +2 -3
- package/cjs/koni/api/nft/index.js +1 -2
- package/cjs/koni/api/nft/karura_nft/index.js +1 -1
- package/cjs/koni/api/nft/quartz_nft/index.js +1 -1
- package/cjs/koni/api/nft/rmrk_nft/index.js +2 -3
- package/cjs/koni/api/nft/statemine_nft/index.js +1 -1
- package/cjs/koni/api/nft/transfer.js +5 -5
- package/cjs/koni/api/nft/unique_nft/index.js +1 -1
- package/cjs/koni/api/nft/unique_nft/uniqueNftV2.js +0 -1
- package/cjs/koni/api/nft/wasm_nft/index.js +1 -2
- package/cjs/koni/api/staking/bonding/astar.js +28 -12
- package/cjs/koni/api/staking/bonding/utils.js +4 -0
- package/cjs/koni/api/staking/relayChain.js +0 -1
- package/cjs/koni/api/staking/subsquidStaking.js +0 -2
- package/cjs/koni/api/tokens/wasm/index.js +0 -1
- package/cjs/koni/api/tokens/wasm/utils.js +0 -1
- package/cjs/koni/api/xcm/index.js +0 -1
- package/cjs/koni/background/cron.js +0 -45
- package/cjs/koni/background/handlers/Extension.js +163 -133
- package/cjs/koni/background/handlers/State.js +18 -3
- package/cjs/koni/background/handlers/Tabs.js +34 -2
- package/cjs/koni/background/handlers/index.js +3 -2
- package/cjs/koni/background/subscription.js +0 -26
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/chain-service/handler/EvmChainHandler.js +1 -1
- package/cjs/services/chain-service/handler/SubstrateChainHandler.js +2 -9
- package/cjs/services/chain-service/handler/light-client/index.js +9 -6
- package/cjs/services/chain-service/index.js +0 -2
- package/cjs/services/chain-service/utils.js +3 -0
- package/cjs/services/history-service/helpers/recoverHistoryStatus.js +108 -0
- package/cjs/services/history-service/index.js +60 -5
- package/cjs/services/history-service/subsquid-multi-chain-history.js +3 -2
- package/cjs/services/history-service/testChainMap.js +724 -0
- package/cjs/services/keyring-service/index.js +0 -2
- package/cjs/services/migration-service/index.js +0 -3
- package/cjs/services/migration-service/scripts/MigrateAutoLock.js +30 -0
- package/cjs/services/migration-service/scripts/MigrateChainPatrol.js +30 -0
- package/cjs/services/migration-service/scripts/index.js +5 -1
- package/cjs/services/price-service/coingecko.js +1 -1
- package/cjs/services/price-service/index.js +0 -3
- package/cjs/services/request-service/handler/AuthRequestHandler.js +1 -1
- package/cjs/services/setting-service/constants.js +8 -2
- package/cjs/services/storage-service/DatabaseService.js +2 -44
- package/cjs/services/transaction-service/constants.js +11 -0
- package/cjs/services/transaction-service/index.js +28 -9
- package/cjs/services/transaction-service/utils.js +25 -14
- package/constants/index.d.ts +1 -1
- package/constants/index.js +1 -1
- package/koni/api/coingecko.js +1 -4
- package/koni/api/dotsama/balance.js +7 -5
- package/koni/api/dotsama/crowdloan.js +0 -4
- package/koni/api/dotsama/transfer.js +0 -4
- package/koni/api/nft/acala_nft/index.js +1 -1
- package/koni/api/nft/bit.country/index.js +1 -1
- package/koni/api/nft/evm_nft/index.js +2 -3
- package/koni/api/nft/index.js +1 -2
- package/koni/api/nft/karura_nft/index.js +1 -1
- package/koni/api/nft/quartz_nft/index.js +1 -1
- package/koni/api/nft/rmrk_nft/index.js +2 -3
- package/koni/api/nft/statemine_nft/index.js +1 -1
- package/koni/api/nft/transfer.js +5 -5
- package/koni/api/nft/unique_nft/index.js +1 -1
- package/koni/api/nft/unique_nft/uniqueNftV2.js +0 -1
- package/koni/api/nft/wasm_nft/index.js +1 -2
- package/koni/api/staking/bonding/astar.d.ts +2 -1
- package/koni/api/staking/bonding/astar.js +27 -12
- package/koni/api/staking/bonding/utils.js +4 -0
- package/koni/api/staking/relayChain.js +0 -1
- package/koni/api/staking/subsquidStaking.js +0 -2
- package/koni/api/tokens/wasm/index.js +0 -1
- package/koni/api/tokens/wasm/utils.js +0 -1
- package/koni/api/xcm/index.js +0 -1
- package/koni/background/cron.js +0 -45
- package/koni/background/handlers/Extension.d.ts +2 -0
- package/koni/background/handlers/Extension.js +78 -50
- package/koni/background/handlers/State.d.ts +3 -1
- package/koni/background/handlers/State.js +18 -3
- package/koni/background/handlers/Tabs.d.ts +1 -0
- package/koni/background/handlers/Tabs.js +32 -1
- package/koni/background/handlers/index.js +3 -2
- package/koni/background/subscription.d.ts +0 -1
- package/koni/background/subscription.js +0 -26
- package/package.json +55 -34
- package/packageInfo.js +1 -1
- package/services/chain-service/handler/EvmChainHandler.js +1 -1
- package/services/chain-service/handler/SubstrateChainHandler.js +2 -9
- package/services/chain-service/handler/light-client/index.js +8 -6
- package/services/chain-service/helper/api-helper/spec/acala.d.ts +3 -3
- package/services/chain-service/index.js +0 -2
- package/services/chain-service/utils.js +3 -0
- package/services/history-service/helpers/recoverHistoryStatus.d.ts +11 -0
- package/services/history-service/helpers/recoverHistoryStatus.js +98 -0
- package/services/history-service/index.d.ts +6 -0
- package/services/history-service/index.js +61 -6
- package/services/history-service/subsquid-multi-chain-history.js +3 -2
- package/services/history-service/testChainMap.d.ts +3 -0
- package/services/history-service/testChainMap.js +716 -0
- package/services/keyring-service/index.js +0 -2
- package/services/migration-service/index.js +0 -3
- package/services/migration-service/scripts/MigrateAutoLock.d.ts +4 -0
- package/services/migration-service/scripts/MigrateAutoLock.js +22 -0
- package/services/migration-service/scripts/MigrateChainPatrol.d.ts +4 -0
- package/services/migration-service/scripts/MigrateChainPatrol.js +22 -0
- package/services/migration-service/scripts/index.js +5 -1
- package/services/price-service/coingecko.js +1 -1
- package/services/price-service/index.js +0 -3
- package/services/request-service/handler/AuthRequestHandler.js +1 -1
- package/services/setting-service/constants.d.ts +4 -2
- package/services/setting-service/constants.js +5 -1
- package/services/storage-service/DatabaseService.js +2 -44
- package/services/transaction-service/constants.d.ts +1 -0
- package/services/transaction-service/constants.js +4 -0
- package/services/transaction-service/index.d.ts +1 -0
- package/services/transaction-service/index.js +29 -10
- package/services/transaction-service/utils.d.ts +1 -1
- 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;
|
|
@@ -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)();
|
|
@@ -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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
18
|
-
if (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
}
|
package/constants/index.d.ts
CHANGED
|
@@ -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';
|
package/constants/index.js
CHANGED
|
@@ -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";
|
package/koni/api/coingecko.js
CHANGED
|
@@ -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(
|
|
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
|
-
|
|
116
|
-
|
|
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(
|
|
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(
|
|
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
|
});
|