@subwallet/extension-base 1.0.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.
- package/background/KoniTypes.d.ts +25 -36
- package/background/KoniTypes.js +12 -7
- package/background/errors/TransactionError.js +21 -1
- package/cjs/background/KoniTypes.js +14 -8
- package/cjs/background/errors/TransactionError.js +20 -0
- package/cjs/constants/index.js +13 -28
- package/cjs/koni/api/dotsama/balance.js +60 -224
- package/cjs/koni/api/dotsama/transfer.js +30 -29
- package/cjs/koni/api/nft/acala_nft/index.js +4 -1
- package/cjs/koni/api/nft/bit.country/index.js +4 -1
- package/cjs/koni/api/nft/evm_nft/index.js +7 -3
- package/cjs/koni/api/nft/index.js +3 -6
- package/cjs/koni/api/nft/karura_nft/index.js +4 -1
- package/cjs/koni/api/nft/rmrk_nft/index.js +8 -1
- package/cjs/koni/api/nft/statemine_nft/index.js +4 -1
- package/cjs/koni/api/nft/unique_nft/index.js +6 -1
- package/cjs/koni/api/nft/wasm_nft/index.js +169 -111
- package/cjs/koni/api/nft/wasm_nft/utils.js +11 -7
- package/cjs/koni/api/staking/bonding/amplitude.js +18 -10
- package/cjs/koni/api/staking/bonding/astar.js +37 -238
- package/cjs/koni/api/staking/bonding/index.js +26 -14
- package/cjs/koni/api/staking/bonding/paraChain.js +100 -11
- package/cjs/koni/api/staking/bonding/relayChain.js +174 -16
- package/cjs/koni/api/staking/bonding/utils.js +55 -10
- package/cjs/koni/api/tokens/wasm/index.js +5 -4
- package/cjs/koni/api/tokens/wasm/utils.js +63 -0
- package/cjs/koni/api/xcm/index.js +0 -111
- package/cjs/koni/api/xcm/polkadotXcm.js +2 -2
- package/cjs/koni/api/xcm/utils.js +18 -13
- package/cjs/koni/api/xcm/xTokens.js +3 -5
- package/cjs/koni/api/xcm/xcmPallet.js +9 -6
- package/cjs/koni/background/cron.js +179 -77
- package/cjs/koni/background/handlers/Extension.js +231 -195
- package/cjs/koni/background/handlers/State.js +147 -111
- package/cjs/koni/background/handlers/Tabs.js +48 -39
- package/cjs/koni/background/subscription.js +64 -56
- package/cjs/packageInfo.js +1 -1
- package/cjs/page/index.js +5 -0
- package/cjs/services/chain-service/constants.js +1 -11
- package/cjs/services/chain-service/handler/SubstrateChainHandler.js +13 -8
- package/cjs/services/chain-service/handler/light-client/index.js +2 -0
- package/cjs/services/chain-service/index.js +39 -6
- package/cjs/services/chain-service/utils.js +4 -0
- package/cjs/services/event-service/index.js +75 -0
- package/cjs/services/event-service/types.js +11 -0
- package/cjs/services/history-service/index.js +46 -21
- package/cjs/services/history-service/subsquid-multi-chain-history.js +19 -11
- package/cjs/services/keyring-service/index.js +101 -0
- package/cjs/services/migration-service/index.js +13 -10
- package/cjs/{koni/migration/scripts/RemoveWrongCrowdloan.js → services/migration-service/scripts/AutoEnableChainsTokens.js} +11 -6
- package/cjs/services/migration-service/scripts/MigrateNetworkSettings.js +39 -19
- package/cjs/services/migration-service/scripts/MigrateSettings.js +31 -0
- package/cjs/services/migration-service/scripts/MigrateTransactionHistory.js +72 -0
- package/cjs/services/migration-service/scripts/index.js +13 -4
- package/cjs/services/price-service/coingecko.js +15 -3
- package/cjs/services/price-service/index.js +15 -18
- package/cjs/services/request-service/constants.js +8 -2
- package/cjs/services/request-service/handler/AuthRequestHandler.js +43 -12
- package/cjs/services/request-service/index.js +3 -0
- package/cjs/services/storage-service/DatabaseService.js +53 -34
- package/cjs/services/storage-service/databases/index.js +1 -1
- package/cjs/services/storage-service/db-stores/BaseStoreWithAddressAndChain.js +2 -8
- package/cjs/services/storage-service/db-stores/Nft.js +8 -18
- package/cjs/services/storage-service/db-stores/Transaction.js +10 -7
- package/cjs/services/subscan-service/index.js +107 -0
- package/cjs/services/subscan-service/subscan-chain-map.js +74 -0
- package/cjs/services/subscan-service/types.js +1 -0
- package/cjs/services/transaction-service/event-parser/index.js +20 -48
- package/cjs/services/transaction-service/index.js +66 -22
- package/cjs/services/transaction-service/utils.js +4 -6
- package/cjs/utils/address.js +9 -1
- package/cjs/utils/index.js +30 -26
- package/constants/index.d.ts +8 -13
- package/constants/index.js +8 -13
- package/koni/api/dotsama/balance.d.ts +0 -1
- package/koni/api/dotsama/balance.js +33 -197
- package/koni/api/dotsama/transfer.js +5 -4
- package/koni/api/nft/acala_nft/index.js +3 -1
- package/koni/api/nft/bit.country/index.js +3 -1
- package/koni/api/nft/evm_nft/index.js +6 -3
- package/koni/api/nft/index.d.ts +1 -2
- package/koni/api/nft/index.js +3 -6
- package/koni/api/nft/karura_nft/index.js +3 -1
- package/koni/api/nft/nft.d.ts +1 -0
- package/koni/api/nft/rmrk_nft/index.js +8 -1
- package/koni/api/nft/statemine_nft/index.js +3 -1
- package/koni/api/nft/unique_nft/index.js +5 -1
- package/koni/api/nft/wasm_nft/index.d.ts +0 -2
- package/koni/api/nft/wasm_nft/index.js +167 -109
- package/koni/api/nft/wasm_nft/utils.d.ts +7 -5
- package/koni/api/nft/wasm_nft/utils.js +7 -5
- package/koni/api/staking/bonding/amplitude.d.ts +1 -2
- package/koni/api/staking/bonding/amplitude.js +22 -13
- package/koni/api/staking/bonding/astar.d.ts +2 -11
- package/koni/api/staking/bonding/astar.js +39 -231
- package/koni/api/staking/bonding/index.d.ts +5 -2
- package/koni/api/staking/bonding/index.js +27 -17
- package/koni/api/staking/bonding/paraChain.d.ts +4 -1
- package/koni/api/staking/bonding/paraChain.js +101 -14
- package/koni/api/staking/bonding/relayChain.d.ts +6 -2
- package/koni/api/staking/bonding/relayChain.js +172 -17
- package/koni/api/staking/bonding/utils.d.ts +15 -2
- package/koni/api/staking/bonding/utils.js +53 -11
- package/koni/api/tokens/wasm/index.js +5 -4
- package/koni/api/tokens/wasm/utils.d.ts +6 -0
- package/koni/api/tokens/wasm/utils.js +54 -0
- package/koni/api/xcm/index.js +1 -112
- package/koni/api/xcm/polkadotXcm.js +3 -3
- package/koni/api/xcm/utils.d.ts +5 -6
- package/koni/api/xcm/utils.js +15 -10
- package/koni/api/xcm/xTokens.js +5 -7
- package/koni/api/xcm/xcmPallet.js +10 -9
- package/koni/background/cron.d.ts +6 -1
- package/koni/background/cron.js +179 -76
- package/koni/background/handlers/Extension.d.ts +2 -2
- package/koni/background/handlers/Extension.js +161 -125
- package/koni/background/handlers/State.d.ts +21 -20
- package/koni/background/handlers/State.js +144 -111
- package/koni/background/handlers/Tabs.js +30 -20
- package/koni/background/subscription.d.ts +1 -1
- package/koni/background/subscription.js +64 -58
- package/package.json +63 -18
- package/packageInfo.js +1 -1
- package/page/index.d.ts +2 -0
- package/page/index.js +4 -0
- package/services/chain-service/constants.d.ts +0 -1
- package/services/chain-service/constants.js +0 -9
- package/services/chain-service/handler/SubstrateChainHandler.js +14 -9
- package/services/chain-service/handler/light-client/index.d.ts +17 -1
- package/services/chain-service/handler/light-client/index.js +1 -1
- package/services/chain-service/helper/psp22_abi.json +1041 -881
- package/services/chain-service/helper/psp34_abi.json +2963 -1807
- package/services/chain-service/index.d.ts +6 -4
- package/services/chain-service/index.js +40 -9
- package/services/chain-service/utils.d.ts +1 -0
- package/services/chain-service/utils.js +3 -0
- package/services/event-service/index.d.ts +22 -0
- package/services/event-service/index.js +63 -0
- package/services/event-service/types.d.ts +28 -0
- package/services/event-service/types.js +4 -0
- package/services/history-service/index.d.ts +5 -3
- package/services/history-service/index.js +46 -21
- package/services/history-service/subsquid-multi-chain-history.js +22 -13
- package/services/keyring-service/index.d.ts +19 -0
- package/services/keyring-service/index.js +93 -0
- package/services/migration-service/index.js +11 -9
- package/services/migration-service/scripts/AutoEnableChainsTokens.d.ts +4 -0
- package/services/migration-service/scripts/AutoEnableChainsTokens.js +13 -0
- package/services/migration-service/scripts/MigrateNetworkSettings.js +37 -18
- package/services/migration-service/scripts/MigrateSettings.d.ts +4 -0
- package/services/migration-service/scripts/MigrateSettings.js +23 -0
- package/services/migration-service/scripts/MigrateTransactionHistory.d.ts +4 -0
- package/services/migration-service/scripts/MigrateTransactionHistory.js +64 -0
- package/services/migration-service/scripts/index.d.ts +1 -0
- package/services/migration-service/scripts/index.js +10 -3
- package/services/price-service/coingecko.js +15 -3
- package/services/price-service/index.d.ts +5 -3
- package/services/price-service/index.js +15 -18
- package/services/request-service/constants.d.ts +1 -0
- package/services/request-service/constants.js +6 -1
- package/services/request-service/handler/AuthRequestHandler.d.ts +8 -1
- package/services/request-service/handler/AuthRequestHandler.js +44 -13
- package/services/request-service/index.d.ts +7 -1
- package/services/request-service/index.js +3 -0
- package/services/storage-service/DatabaseService.d.ts +1 -0
- package/services/storage-service/DatabaseService.js +53 -34
- package/services/storage-service/databases/index.js +1 -1
- package/services/storage-service/db-stores/BaseStoreWithAddressAndChain.d.ts +1 -1
- package/services/storage-service/db-stores/BaseStoreWithAddressAndChain.js +2 -8
- package/services/storage-service/db-stores/Nft.d.ts +3 -3
- package/services/storage-service/db-stores/Nft.js +8 -17
- package/services/storage-service/db-stores/Transaction.js +10 -7
- package/services/subscan-service/index.d.ts +20 -0
- package/services/subscan-service/index.js +99 -0
- package/services/subscan-service/subscan-chain-map.d.ts +5 -0
- package/services/subscan-service/subscan-chain-map.js +63 -0
- package/services/subscan-service/types.d.ts +27 -0
- package/services/subscan-service/types.js +1 -0
- package/services/transaction-service/event-parser/index.d.ts +2 -2
- package/services/transaction-service/event-parser/index.js +21 -49
- package/services/transaction-service/index.d.ts +4 -2
- package/services/transaction-service/index.js +66 -22
- package/services/transaction-service/utils.js +5 -6
- package/utils/address.d.ts +1 -0
- package/utils/address.js +9 -2
- package/utils/index.d.ts +2 -1
- package/utils/index.js +26 -23
- package/cjs/background/errors/EvmRpcError.js +0 -21
- package/cjs/background/errors/SubWalletProviderError.js +0 -17
- package/cjs/constants/ethereum.js +0 -19
- package/cjs/errors/SubWalletProviderError.js +0 -17
- package/cjs/koni/api/xcm/astar.js +0 -160
- package/cjs/koni/api/xcm/moonbeamXcm.js +0 -80
- package/cjs/koni/api/xcm/statemintXcm.js +0 -197
- package/cjs/koni/api/xcm/substrateXcm.js +0 -213
- package/cjs/koni/migration/Base.js +0 -20
- package/cjs/koni/migration/index.js +0 -45
- package/cjs/koni/migration/scripts/ChangeRouteToHome.js +0 -22
- package/cjs/koni/migration/scripts/ClearOldStorage.js +0 -24
- package/cjs/koni/migration/scripts/RemoveWrongTransactionHistoriesFromStore.js +0 -36
- package/cjs/koni/migration/scripts/ResetTransactionHistoryEventIdx.js +0 -21
- package/cjs/koni/migration/scripts/index.js +0 -22
- package/cjs/koni/page/index.js +0 -16
- package/cjs/services/asset-service/index.js +0 -91
- package/cjs/services/storage-service/db-stores/ExtraDelegationInfo.js +0 -17
- package/cjs/stores/Balance.js +0 -18
- package/cjs/stores/Crowdloan.js +0 -18
- package/cjs/stores/CustomEvmToken.js +0 -18
- package/cjs/stores/NetworkMap.js +0 -18
- package/cjs/stores/Nft.js +0 -18
- package/cjs/stores/NftCollection.js +0 -18
- package/cjs/stores/Price.js +0 -18
- package/cjs/stores/Staking.js +0 -18
- package/cjs/stores/StakingReward.js +0 -18
- package/cjs/utils/eth/parseTransactionData.js +0 -284
- package/koni/page/index.d.ts +0 -2
- package/koni/page/index.js +0 -9
- /package/cjs/{koni/page → page}/SubWalleEvmProvider.js +0 -0
- /package/{koni/page → page}/SubWalleEvmProvider.d.ts +0 -0
- /package/{koni/page → page}/SubWalleEvmProvider.js +0 -0
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.HistoryService = void 0;
|
|
7
7
|
var _constants = require("@subwallet/extension-base/constants");
|
|
8
|
+
var _uiKeyring = require("@subwallet/ui-keyring");
|
|
8
9
|
var _accounts = require("@subwallet/ui-keyring/observable/accounts");
|
|
9
10
|
var _rxjs = require("rxjs");
|
|
10
11
|
var _subsquidMultiChainHistory = require("./subsquid-multi-chain-history");
|
|
@@ -13,20 +14,25 @@ var _subsquidMultiChainHistory = require("./subsquid-multi-chain-history");
|
|
|
13
14
|
|
|
14
15
|
class HistoryService {
|
|
15
16
|
historySubject = new _rxjs.BehaviorSubject([]);
|
|
16
|
-
constructor(dbService, chainService) {
|
|
17
|
+
constructor(dbService, chainService, eventService) {
|
|
17
18
|
this.dbService = dbService;
|
|
18
19
|
this.chainService = chainService;
|
|
19
|
-
|
|
20
|
+
this.eventService = eventService;
|
|
20
21
|
// Load history from database
|
|
21
22
|
this.dbService.getHistories().then(histories => {
|
|
22
23
|
this.historySubject.next(histories);
|
|
23
24
|
}).catch(console.error);
|
|
24
25
|
|
|
25
|
-
//
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
// Wait for keyring and chain ready and start
|
|
27
|
+
Promise.all([this.eventService.waitKeyringReady, this.eventService.waitChainReady]).then(() => {
|
|
28
|
+
this.getHistories().catch(console.log);
|
|
29
|
+
this.eventService.on('account.add', () => {
|
|
30
|
+
this.refreshHistoryInterval();
|
|
31
|
+
});
|
|
32
|
+
this.eventService.on('account.remove', address => {
|
|
33
|
+
this.removeHistoryByAddress(address).catch(console.error);
|
|
34
|
+
});
|
|
35
|
+
}).catch(console.error);
|
|
30
36
|
}
|
|
31
37
|
fetchPromise = null;
|
|
32
38
|
nextFetch = undefined;
|
|
@@ -50,8 +56,8 @@ class HistoryService {
|
|
|
50
56
|
record.fromName = accountMap[(_record$from = record.from) === null || _record$from === void 0 ? void 0 : _record$from.toLowerCase()];
|
|
51
57
|
record.toName = accountMap[(_record$to = record.to) === null || _record$to === void 0 ? void 0 : _record$to.toLowerCase()];
|
|
52
58
|
});
|
|
53
|
-
await this.
|
|
54
|
-
return
|
|
59
|
+
await this.addHistoryItems(historyRecords);
|
|
60
|
+
return historyRecords;
|
|
55
61
|
}
|
|
56
62
|
async fetchHistories(addresses) {
|
|
57
63
|
if (!this.fetchPromise) {
|
|
@@ -67,13 +73,16 @@ class HistoryService {
|
|
|
67
73
|
clearTimeout(this.nextFetch);
|
|
68
74
|
this.invalidCache();
|
|
69
75
|
this.getHistories().catch(console.error);
|
|
70
|
-
this.nextFetch = setTimeout(
|
|
76
|
+
this.nextFetch = setTimeout(() => {
|
|
77
|
+
this.refreshHistoryInterval();
|
|
78
|
+
}, _constants.CRON_REFRESH_HISTORY_INTERVAL);
|
|
71
79
|
}
|
|
72
80
|
async getHistories() {
|
|
73
|
-
const addressList =
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
this.
|
|
81
|
+
const addressList = _uiKeyring.keyring.getAccounts().map(a => a.address);
|
|
82
|
+
const currentHistories = this.historySubject.value;
|
|
83
|
+
if (!this.fetchPromise || currentHistories.length === 0) {
|
|
84
|
+
await this.fetchHistories(addressList);
|
|
85
|
+
this.historySubject.next(await this.dbService.getHistories());
|
|
77
86
|
}
|
|
78
87
|
return this.historySubject.getValue();
|
|
79
88
|
}
|
|
@@ -81,11 +90,7 @@ class HistoryService {
|
|
|
81
90
|
await this.getHistories();
|
|
82
91
|
return this.historySubject;
|
|
83
92
|
}
|
|
84
|
-
async
|
|
85
|
-
await this.dbService.upsertHistory([historyItem]);
|
|
86
|
-
this.historySubject.next(await this.dbService.getHistories());
|
|
87
|
-
}
|
|
88
|
-
async updateHistory(chain, extrinsicHash, historyItem) {
|
|
93
|
+
async updateHistories(chain, extrinsicHash, updateData) {
|
|
89
94
|
const existedRecords = await this.dbService.getHistories({
|
|
90
95
|
chain,
|
|
91
96
|
extrinsicHash
|
|
@@ -93,15 +98,35 @@ class HistoryService {
|
|
|
93
98
|
const updatedRecords = existedRecords.map(r => {
|
|
94
99
|
return {
|
|
95
100
|
...r,
|
|
96
|
-
...
|
|
101
|
+
...updateData
|
|
97
102
|
};
|
|
98
103
|
});
|
|
99
104
|
await this.addHistoryItems(updatedRecords);
|
|
100
105
|
}
|
|
101
|
-
|
|
106
|
+
|
|
107
|
+
// Insert history without check override origin 'app'
|
|
108
|
+
async insertHistories(historyItems) {
|
|
102
109
|
await this.dbService.upsertHistory(historyItems);
|
|
103
110
|
this.historySubject.next(await this.dbService.getHistories());
|
|
104
111
|
}
|
|
112
|
+
|
|
113
|
+
// Insert history with check override origin 'app'
|
|
114
|
+
async addHistoryItems(historyItems) {
|
|
115
|
+
// Prevent override record with original is 'app'
|
|
116
|
+
const appRecords = this.historySubject.value.filter(item => item.origin === 'app');
|
|
117
|
+
const excludeKeys = appRecords.map(item => {
|
|
118
|
+
return `${item.chain}-${item.extrinsicHash}`;
|
|
119
|
+
});
|
|
120
|
+
const updateRecords = historyItems.filter(item => {
|
|
121
|
+
const key = `${item.chain}-${item.extrinsicHash}`;
|
|
122
|
+
|
|
123
|
+
// !excludeKeys.includes(key) && console.log('Cancel update', key);
|
|
124
|
+
|
|
125
|
+
return item.origin === 'app' || !excludeKeys.includes(key);
|
|
126
|
+
});
|
|
127
|
+
await this.dbService.upsertHistory(updateRecords);
|
|
128
|
+
this.historySubject.next(await this.dbService.getHistories());
|
|
129
|
+
}
|
|
105
130
|
async removeHistoryByAddress(address) {
|
|
106
131
|
await this.dbService.stores.transaction.removeAllByAddress(address);
|
|
107
132
|
this.historySubject.next(await this.dbService.getHistories());
|
|
@@ -67,12 +67,15 @@ function autoFormatAddress(address) {
|
|
|
67
67
|
return '';
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
-
function generateSignature(
|
|
71
|
-
|
|
70
|
+
function generateSignature(input) {
|
|
71
|
+
if (!input) {
|
|
72
|
+
return '';
|
|
73
|
+
}
|
|
74
|
+
const {
|
|
72
75
|
r,
|
|
73
76
|
s,
|
|
74
77
|
v
|
|
75
|
-
} =
|
|
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);
|
|
@@ -119,10 +122,15 @@ function parseSubsquidTransactionData(address, type, historyItem, chainInfo, arg
|
|
|
119
122
|
to = autoFormatAddress(parsedArgs.to);
|
|
120
123
|
from = autoFormatAddress(parsedArgs.from);
|
|
121
124
|
extrinsicHash = parsedArgs.transactionHash;
|
|
122
|
-
amount = transaction.value;
|
|
125
|
+
amount = transaction.value || '0';
|
|
123
126
|
fee = (parseInt(transaction.gasPrice) * parseInt(transaction.gasLimit)).toString();
|
|
124
127
|
signature = generateSignature(transaction.signature);
|
|
125
128
|
success = extrinsic.success;
|
|
129
|
+
|
|
130
|
+
// Special fix for moonbeam
|
|
131
|
+
if ((historyItem.chainId === 'moonbeam' || historyItem.chainId === 'moonriver') && typeof amount === 'object') {
|
|
132
|
+
amount = amount[0];
|
|
133
|
+
}
|
|
126
134
|
break;
|
|
127
135
|
}
|
|
128
136
|
|
|
@@ -167,7 +175,7 @@ function parseSubsquidTransactionData(address, type, historyItem, chainInfo, arg
|
|
|
167
175
|
}
|
|
168
176
|
return {
|
|
169
177
|
address,
|
|
170
|
-
origin:
|
|
178
|
+
origin: 'subsquid',
|
|
171
179
|
time: toTimestamp(historyItem.timestamp),
|
|
172
180
|
chainType,
|
|
173
181
|
from,
|
|
@@ -250,14 +258,14 @@ async function fetchMultiChainHistories(addresses, chainMap) {
|
|
|
250
258
|
console.warn(`Not found chain info for chain id: ${chainId}`);
|
|
251
259
|
return;
|
|
252
260
|
}
|
|
253
|
-
|
|
254
|
-
|
|
261
|
+
usedAddresses.forEach(address => {
|
|
262
|
+
try {
|
|
255
263
|
const transactionData = parseSubsquidTransactionData(address, name, historyItem, chainInfo, parseData(args), parseData(_data));
|
|
256
264
|
histories.push(transactionData);
|
|
257
|
-
})
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
}
|
|
265
|
+
} catch (e) {
|
|
266
|
+
console.warn('Parse transaction data failed', address, e);
|
|
267
|
+
}
|
|
268
|
+
});
|
|
261
269
|
});
|
|
262
270
|
return histories;
|
|
263
271
|
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.KeyringService = void 0;
|
|
7
|
+
var _stores = require("@subwallet/extension-base/stores");
|
|
8
|
+
var _uiKeyring = require("@subwallet/ui-keyring");
|
|
9
|
+
var _rxjs = require("rxjs");
|
|
10
|
+
// Copyright 2019-2022 @subwallet/extension-base
|
|
11
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
12
|
+
|
|
13
|
+
class KeyringService {
|
|
14
|
+
currentAccountStore = new _stores.CurrentAccountStore();
|
|
15
|
+
currentAccountSubject = new _rxjs.BehaviorSubject({
|
|
16
|
+
address: '',
|
|
17
|
+
currentGenesisHash: null
|
|
18
|
+
});
|
|
19
|
+
accountsSubject = _uiKeyring.keyring.accounts.subject;
|
|
20
|
+
beforeAccount = _uiKeyring.keyring.accounts.subject.value;
|
|
21
|
+
keyringStateSubject = new _rxjs.BehaviorSubject({
|
|
22
|
+
isReady: false,
|
|
23
|
+
hasMasterPassword: false,
|
|
24
|
+
isLocked: false
|
|
25
|
+
});
|
|
26
|
+
constructor(eventService) {
|
|
27
|
+
this.eventService = eventService;
|
|
28
|
+
this.currentAccountStore.get('CurrentAccountInfo', rs => {
|
|
29
|
+
this.currentAccountSubject.next(rs);
|
|
30
|
+
});
|
|
31
|
+
this.subscribeAccounts().catch(console.error);
|
|
32
|
+
}
|
|
33
|
+
async subscribeAccounts() {
|
|
34
|
+
// Wait until account ready
|
|
35
|
+
await new Promise(resolve => {
|
|
36
|
+
const onReady = () => {
|
|
37
|
+
this.eventService.off('account.ready', onReady);
|
|
38
|
+
resolve(true);
|
|
39
|
+
};
|
|
40
|
+
this.eventService.on('account.ready', onReady);
|
|
41
|
+
});
|
|
42
|
+
this.beforeAccount = {
|
|
43
|
+
...this.accountsSubject.value
|
|
44
|
+
};
|
|
45
|
+
this.accountsSubject.subscribe(subjectInfo => {
|
|
46
|
+
// Check if accounts changed
|
|
47
|
+
const beforeAddresses = Object.keys(this.beforeAccount);
|
|
48
|
+
const afterAddresses = Object.keys(subjectInfo);
|
|
49
|
+
if (beforeAddresses.length > afterAddresses.length) {
|
|
50
|
+
const removedAddresses = beforeAddresses.filter(address => !afterAddresses.includes(address));
|
|
51
|
+
|
|
52
|
+
// Remove account
|
|
53
|
+
removedAddresses.forEach(address => {
|
|
54
|
+
console.log('account.remove', address);
|
|
55
|
+
this.eventService.emit('account.remove', address);
|
|
56
|
+
});
|
|
57
|
+
} else if (beforeAddresses.length < afterAddresses.length) {
|
|
58
|
+
const addedAddresses = afterAddresses.filter(address => !beforeAddresses.includes(address));
|
|
59
|
+
|
|
60
|
+
// Add account
|
|
61
|
+
addedAddresses.forEach(address => {
|
|
62
|
+
console.log('account.add', address);
|
|
63
|
+
this.eventService.emit('account.add', address);
|
|
64
|
+
});
|
|
65
|
+
} else {
|
|
66
|
+
// Handle case update later
|
|
67
|
+
}
|
|
68
|
+
this.beforeAccount = {
|
|
69
|
+
...subjectInfo
|
|
70
|
+
};
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
get keyringState() {
|
|
74
|
+
return this.keyringStateSubject.value;
|
|
75
|
+
}
|
|
76
|
+
updateKeyringState() {
|
|
77
|
+
var _keyring$keyring, _keyring$keyring2;
|
|
78
|
+
let isReady = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
79
|
+
if (!this.keyringState.isReady && isReady) {
|
|
80
|
+
this.eventService.emit('keyring.ready', true);
|
|
81
|
+
this.eventService.emit('account.ready', true);
|
|
82
|
+
}
|
|
83
|
+
this.keyringStateSubject.next({
|
|
84
|
+
hasMasterPassword: !!((_keyring$keyring = _uiKeyring.keyring.keyring) !== null && _keyring$keyring !== void 0 && _keyring$keyring.hasMasterPassword),
|
|
85
|
+
isLocked: !!((_keyring$keyring2 = _uiKeyring.keyring.keyring) !== null && _keyring$keyring2 !== void 0 && _keyring$keyring2.isLocked),
|
|
86
|
+
isReady: isReady
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
get accounts() {
|
|
90
|
+
return this.accountsSubject.value;
|
|
91
|
+
}
|
|
92
|
+
get currentAccount() {
|
|
93
|
+
return this.currentAccountSubject.value;
|
|
94
|
+
}
|
|
95
|
+
setCurrentAccount(currentAccountData) {
|
|
96
|
+
this.currentAccountSubject.next(currentAccountData);
|
|
97
|
+
this.eventService.emit('account.updateCurrent', currentAccountData);
|
|
98
|
+
this.currentAccountStore.set('CurrentAccountInfo', currentAccountData);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
exports.KeyringService = KeyringService;
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
6
|
exports.default = void 0;
|
|
8
7
|
var _util = require("@polkadot/util");
|
|
9
|
-
var _scripts =
|
|
8
|
+
var _scripts = _interopRequireWildcard(require("./scripts"));
|
|
9
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
10
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
10
11
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
11
12
|
// SPDX-License-Identifier: Apache-2.0
|
|
12
13
|
|
|
@@ -21,23 +22,25 @@ class MigrationService {
|
|
|
21
22
|
try {
|
|
22
23
|
for (let i = 0; i < keys.length; i++) {
|
|
23
24
|
const JobClass = _scripts.default[keys[i]];
|
|
25
|
+
const key = keys[i];
|
|
26
|
+
const name = JobClass.name;
|
|
24
27
|
const check = await this.state.dbService.stores.migration.table.where({
|
|
25
|
-
name
|
|
26
|
-
key
|
|
28
|
+
name,
|
|
29
|
+
key
|
|
27
30
|
}).first();
|
|
28
|
-
if (!check) {
|
|
29
|
-
const job = new JobClass(this.state);
|
|
31
|
+
if (!check || key.startsWith(_scripts.EVERYTIME)) {
|
|
30
32
|
this.logger.log('Running script: ', JobClass.name);
|
|
33
|
+
const job = new JobClass(this.state);
|
|
31
34
|
await job.run();
|
|
32
35
|
await this.state.dbService.stores.migration.table.put({
|
|
33
|
-
key
|
|
34
|
-
name
|
|
35
|
-
timestamp:
|
|
36
|
+
key,
|
|
37
|
+
name,
|
|
38
|
+
timestamp: new Date().getTime()
|
|
36
39
|
});
|
|
37
40
|
}
|
|
38
41
|
}
|
|
39
42
|
} catch (error) {
|
|
40
|
-
this.logger.
|
|
43
|
+
this.logger.error('Migration error: ', error);
|
|
41
44
|
}
|
|
42
45
|
this.logger.log('Migration done.');
|
|
43
46
|
}
|
|
@@ -5,15 +5,20 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.default = void 0;
|
|
8
|
-
var _Base = _interopRequireDefault(require("@subwallet/extension-base/
|
|
9
|
-
var
|
|
8
|
+
var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
|
|
9
|
+
var _uiKeyring = require("@subwallet/ui-keyring");
|
|
10
10
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
11
11
|
// SPDX-License-Identifier: Apache-2.0
|
|
12
12
|
|
|
13
|
-
class
|
|
13
|
+
class AutoEnableChainsTokens extends _Base.default {
|
|
14
14
|
async run() {
|
|
15
|
-
const
|
|
16
|
-
await
|
|
15
|
+
const accounts = _uiKeyring.keyring.getAccounts();
|
|
16
|
+
await this.state.autoEnableChains(accounts.map(_ref => {
|
|
17
|
+
let {
|
|
18
|
+
address
|
|
19
|
+
} = _ref;
|
|
20
|
+
return address;
|
|
21
|
+
}));
|
|
17
22
|
}
|
|
18
23
|
}
|
|
19
|
-
exports.default =
|
|
24
|
+
exports.default = AutoEnableChainsTokens;
|
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.default = void 0;
|
|
8
|
+
var _types = require("@subwallet/chain-list/types");
|
|
8
9
|
var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
|
|
9
10
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
10
11
|
// SPDX-License-Identifier: Apache-2.0
|
|
@@ -12,28 +13,47 @@ var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/m
|
|
|
12
13
|
class MigrateNetworkSettings extends _Base.default {
|
|
13
14
|
async run() {
|
|
14
15
|
const state = this.state;
|
|
15
|
-
|
|
16
|
-
chrome.storage.local.get('NetworkMap',
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
16
|
+
const items = await new Promise(resolve => {
|
|
17
|
+
chrome.storage.local.get('NetworkMap', items => {
|
|
18
|
+
resolve(items);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
const oldNetworkMap = items.NetworkMap;
|
|
22
|
+
const enableList = [];
|
|
23
|
+
const stateMap = state.getChainStateMap();
|
|
24
|
+
if (!oldNetworkMap) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
Object.entries(oldNetworkMap).forEach(_ref => {
|
|
28
|
+
let [slug, chain] = _ref;
|
|
29
|
+
if (chain.active) {
|
|
30
|
+
const currentState = stateMap[slug];
|
|
31
|
+
|
|
32
|
+
// Ensure chain in the list and is not active
|
|
33
|
+
currentState && enableList.push(slug);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
if (enableList.length > 0) {
|
|
37
|
+
state.chainService.enableChains(enableList);
|
|
25
38
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
39
|
+
// Enable native token of these chains
|
|
40
|
+
const currentAssetSettings = await state.chainService.getAssetSettings();
|
|
41
|
+
const assetInfoMap = state.chainService.getAssetRegistry();
|
|
42
|
+
Object.entries(assetInfoMap).forEach(_ref2 => {
|
|
43
|
+
let [slug, assetInfo] = _ref2;
|
|
44
|
+
const assetSetting = currentAssetSettings[slug] || {};
|
|
45
|
+
|
|
46
|
+
// Enable native token of these chains
|
|
47
|
+
if (assetInfo.name && assetInfo.assetType === _types._AssetType.NATIVE && enableList.includes(assetInfo.originChain) && !assetSetting.visible) {
|
|
48
|
+
currentAssetSettings[slug] = {
|
|
49
|
+
visible: true
|
|
50
|
+
};
|
|
33
51
|
}
|
|
34
|
-
resolve();
|
|
35
52
|
});
|
|
36
|
-
|
|
53
|
+
state.chainService.setAssetSettings({
|
|
54
|
+
...currentAssetSettings
|
|
55
|
+
});
|
|
56
|
+
}
|
|
37
57
|
}
|
|
38
58
|
}
|
|
39
59
|
exports.default = MigrateNetworkSettings;
|
|
@@ -0,0 +1,31 @@
|
|
|
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 _uiSettings = _interopRequireDefault(require("@polkadot/ui-settings"));
|
|
10
|
+
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
11
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
12
|
+
|
|
13
|
+
class MigrateSettings extends _Base.default {
|
|
14
|
+
async run() {
|
|
15
|
+
try {
|
|
16
|
+
return new Promise(resolve => {
|
|
17
|
+
this.state.settingService.getSettings(currentSettings => {
|
|
18
|
+
const isAccessCamera = _uiSettings.default.camera === 'on';
|
|
19
|
+
this.state.settingService.setSettings({
|
|
20
|
+
...currentSettings,
|
|
21
|
+
camera: isAccessCamera
|
|
22
|
+
});
|
|
23
|
+
resolve();
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
} catch (e) {
|
|
27
|
+
console.error(e);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.default = MigrateSettings;
|
|
@@ -0,0 +1,72 @@
|
|
|
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 _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
9
|
+
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
10
|
+
var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
|
|
11
|
+
var _dexie = _interopRequireDefault(require("dexie"));
|
|
12
|
+
var _utilCrypto = require("@polkadot/util-crypto");
|
|
13
|
+
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
14
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
15
|
+
|
|
16
|
+
class MigrateTransactionHistory extends _Base.default {
|
|
17
|
+
async run() {
|
|
18
|
+
const state = this.state;
|
|
19
|
+
const chainInfoMap = state.getChainInfoMap();
|
|
20
|
+
const assetList = Object.values(state.getAssetRegistry());
|
|
21
|
+
try {
|
|
22
|
+
const db = new _dexie.default('SubWalletDB');
|
|
23
|
+
const dexieDB = await db.open();
|
|
24
|
+
const transactionTable = dexieDB.table('transactions');
|
|
25
|
+
const oldTransactionData = await transactionTable.toArray();
|
|
26
|
+
const newTransactionItems = [];
|
|
27
|
+
oldTransactionData.forEach(item => {
|
|
28
|
+
const chainInfo = chainInfoMap[item.networkKey];
|
|
29
|
+
if (!chainInfo) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const direction = item.action === 'send' ? _KoniTypes.TransactionDirection.SEND : _KoniTypes.TransactionDirection.RECEIVED;
|
|
33
|
+
const extrinsicType = item.changeSymbol === item.feeSymbol ? _KoniTypes.ExtrinsicType.TRANSFER_BALANCE : _KoniTypes.ExtrinsicType.TRANSFER_TOKEN;
|
|
34
|
+
const nativeAsset = (0, _utils._getChainNativeTokenBasicInfo)(chainInfo);
|
|
35
|
+
const transferAsset = assetList.find(a => a.originChain === item.networkKey && a.symbol === item.changeSymbol) || nativeAsset;
|
|
36
|
+
const newItem = {
|
|
37
|
+
chain: item.networkKey,
|
|
38
|
+
origin: 'migration',
|
|
39
|
+
type: extrinsicType,
|
|
40
|
+
address: item.address,
|
|
41
|
+
extrinsicHash: item.extrinsicHash,
|
|
42
|
+
time: item.time,
|
|
43
|
+
status: item.isSuccess ? _KoniTypes.ExtrinsicStatus.SUCCESS : _KoniTypes.ExtrinsicStatus.FAIL,
|
|
44
|
+
from: direction === _KoniTypes.TransactionDirection.SEND ? item.address : '',
|
|
45
|
+
to: direction === _KoniTypes.TransactionDirection.RECEIVED ? item.address : '',
|
|
46
|
+
amount: {
|
|
47
|
+
value: item.change,
|
|
48
|
+
decimals: transferAsset.decimals || 18,
|
|
49
|
+
symbol: transferAsset.symbol
|
|
50
|
+
},
|
|
51
|
+
fee: {
|
|
52
|
+
value: item.fee,
|
|
53
|
+
decimals: nativeAsset.decimals,
|
|
54
|
+
symbol: nativeAsset.symbol
|
|
55
|
+
},
|
|
56
|
+
direction: direction,
|
|
57
|
+
chainType: (0, _utilCrypto.isEthereumAddress)(item.address) ? _KoniTypes.ChainType.EVM : _KoniTypes.ChainType.SUBSTRATE,
|
|
58
|
+
chainName: chainInfo.name,
|
|
59
|
+
blockNumber: 0,
|
|
60
|
+
blockHash: '',
|
|
61
|
+
data: '',
|
|
62
|
+
signature: ''
|
|
63
|
+
};
|
|
64
|
+
newTransactionItems.push(newItem);
|
|
65
|
+
});
|
|
66
|
+
await state.historyService.addHistoryItems(newTransactionItems);
|
|
67
|
+
} catch (e) {
|
|
68
|
+
this.logger.error(e);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.default = MigrateTransactionHistory;
|
|
@@ -4,14 +4,23 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.default = void 0;
|
|
7
|
+
exports.default = exports.EVERYTIME = void 0;
|
|
8
|
+
var _AutoEnableChainsTokens = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/AutoEnableChainsTokens"));
|
|
8
9
|
var _MigrateImportedToken = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateImportedToken"));
|
|
9
10
|
var _MigrateNetworkSettings = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateNetworkSettings"));
|
|
11
|
+
var _MigrateSettings = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateSettings"));
|
|
12
|
+
var _MigrateTransactionHistory = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateTransactionHistory"));
|
|
10
13
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
11
14
|
// SPDX-License-Identifier: Apache-2.0
|
|
15
|
+
|
|
16
|
+
const EVERYTIME = '__everytime__';
|
|
17
|
+
exports.EVERYTIME = EVERYTIME;
|
|
12
18
|
var _default = {
|
|
13
|
-
'1.0.1-
|
|
14
|
-
'1.0.1-
|
|
15
|
-
|
|
19
|
+
'1.0.1-11': _MigrateNetworkSettings.default,
|
|
20
|
+
'1.0.1-20': _MigrateImportedToken.default,
|
|
21
|
+
'1.0.1-30': _MigrateTransactionHistory.default,
|
|
22
|
+
'1.0.1-40': _AutoEnableChainsTokens.default,
|
|
23
|
+
'1.0.1-50': _MigrateSettings.default
|
|
24
|
+
// [`${EVERYTIME}-1`]: AutoEnableChainsTokens
|
|
16
25
|
};
|
|
17
26
|
exports.default = _default;
|
|
@@ -9,16 +9,28 @@ var _axios = _interopRequireDefault(require("axios"));
|
|
|
9
9
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
10
10
|
// SPDX-License-Identifier: Apache-2.0
|
|
11
11
|
|
|
12
|
+
let useBackupApi = false;
|
|
12
13
|
const getTokenPrice = async function (priceIds) {
|
|
13
14
|
let currency = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'usd';
|
|
14
15
|
try {
|
|
16
|
+
var _res;
|
|
15
17
|
const idStr = Array.from(priceIds).join(',');
|
|
16
|
-
|
|
17
|
-
|
|
18
|
+
let res;
|
|
19
|
+
if (!useBackupApi) {
|
|
20
|
+
try {
|
|
21
|
+
res = await _axios.default.get(`https://api.coingecko.com/api/v3/coins/markets?vs_currency=${currency}&per_page=250&ids=${idStr}`);
|
|
22
|
+
} catch (err) {
|
|
23
|
+
useBackupApi = true;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (useBackupApi || ((_res = res) === null || _res === void 0 ? void 0 : _res.status) !== 200) {
|
|
27
|
+
useBackupApi = true;
|
|
28
|
+
res = await _axios.default.get(`https://chain-data.subwallet.app/api/price/get?ids=${idStr}`);
|
|
29
|
+
}
|
|
18
30
|
if (res.status !== 200) {
|
|
19
31
|
console.warn('Failed to get token price');
|
|
20
32
|
}
|
|
21
|
-
const responseData = res.data;
|
|
33
|
+
const responseData = res.data || [];
|
|
22
34
|
const priceMap = {};
|
|
23
35
|
const price24hMap = {};
|
|
24
36
|
responseData.forEach(val => {
|
|
@@ -19,27 +19,27 @@ const DEFAULT_PRICE_SUBJECT = {
|
|
|
19
19
|
class PriceService {
|
|
20
20
|
priceSubject = new _rxjs.BehaviorSubject(DEFAULT_PRICE_SUBJECT);
|
|
21
21
|
priceIds = new Set();
|
|
22
|
-
constructor(
|
|
22
|
+
constructor(dbService, eventService, chainService) {
|
|
23
23
|
this.dbService = dbService;
|
|
24
|
+
this.eventService = eventService;
|
|
24
25
|
this.chainService = chainService;
|
|
25
26
|
|
|
26
27
|
// Fetch data from storage
|
|
27
28
|
this.getPrice().catch(console.error);
|
|
29
|
+
const eventHandler = () => {
|
|
30
|
+
const newPriceIds = this.getPriceIds();
|
|
28
31
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
+
// Compare two set newPriceIds and this.priceIds
|
|
33
|
+
if (newPriceIds.size !== this.priceIds.size || !Array.from(newPriceIds).every(v => this.priceIds.has(v))) {
|
|
34
|
+
this.priceIds = newPriceIds;
|
|
35
|
+
this.refreshPriceData(this.priceIds);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
this.eventService.waitAssetReady.then(() => {
|
|
32
39
|
this.refreshPriceData();
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
// Compare two set newPriceIds and this.priceIds
|
|
37
|
-
if (newPriceIds.size !== this.priceIds.size || !Array.from(newPriceIds).every(v => this.priceIds.has(v))) {
|
|
38
|
-
this.priceIds = newPriceIds;
|
|
39
|
-
this.refreshPriceData(this.priceIds);
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
}, 3000);
|
|
40
|
+
this.eventService.on('asset.updateState', eventHandler);
|
|
41
|
+
this.eventService.on('asset.updateState', eventHandler);
|
|
42
|
+
}).catch(console.error);
|
|
43
43
|
}
|
|
44
44
|
async getPrice() {
|
|
45
45
|
const isReady = this.priceSubject.value.ready;
|
|
@@ -68,10 +68,7 @@ class PriceService {
|
|
|
68
68
|
ready: true
|
|
69
69
|
});
|
|
70
70
|
this.dbService.updatePriceStore(rs).catch(console.error);
|
|
71
|
-
|
|
72
|
-
}).catch(e => {
|
|
73
|
-
// Pass
|
|
74
|
-
});
|
|
71
|
+
}).catch(console.error);
|
|
75
72
|
this.refreshTimeout = setTimeout(this.refreshPriceData.bind(this), _constants.CRON_REFRESH_PRICE_INTERVAL);
|
|
76
73
|
}
|
|
77
74
|
}
|