@subwallet/extension-base 1.0.2-2 → 1.0.2-3
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 +46 -38
- package/background/KoniTypes.js +8 -8
- package/background/errors/TransactionError.js +25 -1
- package/background/types.d.ts +10 -5
- package/cjs/background/KoniTypes.js +8 -8
- package/cjs/background/errors/TransactionError.js +24 -0
- package/cjs/constants/index.js +8 -26
- package/cjs/koni/api/dotsama/balance.js +49 -224
- package/cjs/koni/api/dotsama/transfer.js +34 -39
- package/cjs/koni/api/nft/acala_nft/index.js +7 -7
- package/cjs/koni/api/nft/bit.country/index.js +7 -6
- package/cjs/koni/api/nft/evm_nft/index.js +8 -3
- package/cjs/koni/api/nft/index.js +3 -6
- package/cjs/koni/api/nft/karura_nft/index.js +7 -6
- package/cjs/koni/api/nft/rmrk_nft/index.js +11 -1
- package/cjs/koni/api/nft/statemine_nft/index.js +7 -6
- package/cjs/koni/api/nft/unique_nft/index.js +5 -1
- package/cjs/koni/api/nft/wasm_nft/index.js +170 -111
- package/cjs/koni/api/nft/wasm_nft/utils.js +11 -7
- package/cjs/koni/api/staking/bonding/amplitude.js +13 -9
- package/cjs/koni/api/staking/bonding/astar.js +15 -13
- package/cjs/koni/api/staking/bonding/index.js +22 -10
- package/cjs/koni/api/staking/bonding/paraChain.js +85 -2
- package/cjs/koni/api/staking/bonding/relayChain.js +122 -16
- package/cjs/koni/api/staking/bonding/utils.js +27 -8
- 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/polkadotXcm.js +1 -1
- package/cjs/koni/api/xcm/utils.js +18 -13
- package/cjs/koni/api/xcm/xTokens.js +1 -1
- package/cjs/koni/api/xcm/xcmPallet.js +9 -6
- package/cjs/koni/background/cron.js +171 -61
- package/cjs/koni/background/handlers/Extension.js +382 -207
- package/cjs/koni/background/handlers/State.js +41 -33
- package/cjs/koni/background/handlers/Tabs.js +50 -17
- package/cjs/koni/background/subscription.js +32 -29
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/chain-service/handler/SubstrateChainHandler.js +13 -8
- package/cjs/services/chain-service/index.js +59 -45
- package/cjs/services/event-service/index.js +5 -1
- package/cjs/services/event-service/types.js +11 -1
- package/cjs/services/history-service/index.js +19 -13
- package/cjs/services/history-service/subsquid-multi-chain-history.js +13 -10
- package/cjs/services/keyring-service/index.js +11 -13
- package/cjs/services/price-service/coingecko.js +0 -1
- package/cjs/services/price-service/index.js +2 -3
- package/cjs/services/request-service/handler/AuthRequestHandler.js +13 -7
- package/cjs/services/request-service/handler/EvmRequestHandler.js +8 -12
- package/cjs/services/request-service/index.js +14 -5
- package/cjs/services/storage-service/DatabaseService.js +56 -34
- package/cjs/services/storage-service/db-stores/Nft.js +7 -15
- package/cjs/services/transaction-service/event-parser/index.js +20 -48
- package/cjs/services/transaction-service/index.js +26 -15
- package/cjs/utils/address.js +10 -1
- package/cjs/utils/index.js +9 -15
- package/constants/index.d.ts +7 -13
- package/constants/index.js +7 -13
- package/koni/api/dotsama/balance.d.ts +0 -1
- package/koni/api/dotsama/balance.js +22 -197
- package/koni/api/dotsama/transfer.js +11 -16
- package/koni/api/nft/acala_nft/index.js +7 -7
- package/koni/api/nft/bit.country/index.js +7 -6
- package/koni/api/nft/evm_nft/index.js +7 -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 +7 -6
- package/koni/api/nft/nft.d.ts +1 -0
- package/koni/api/nft/rmrk_nft/index.js +11 -1
- package/koni/api/nft/statemine_nft/index.js +7 -6
- 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 +168 -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 +0 -1
- package/koni/api/staking/bonding/amplitude.js +15 -10
- package/koni/api/staking/bonding/astar.js +8 -6
- package/koni/api/staking/bonding/index.d.ts +4 -1
- package/koni/api/staking/bonding/index.js +23 -13
- package/koni/api/staking/bonding/paraChain.d.ts +3 -0
- package/koni/api/staking/bonding/paraChain.js +86 -5
- package/koni/api/staking/bonding/relayChain.d.ts +5 -1
- package/koni/api/staking/bonding/relayChain.js +121 -18
- package/koni/api/staking/bonding/utils.d.ts +3 -2
- package/koni/api/staking/bonding/utils.js +27 -9
- 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/polkadotXcm.js +2 -2
- package/koni/api/xcm/utils.d.ts +5 -6
- package/koni/api/xcm/utils.js +15 -10
- package/koni/api/xcm/xTokens.js +2 -2
- package/koni/api/xcm/xcmPallet.js +10 -9
- package/koni/background/cron.d.ts +6 -1
- package/koni/background/cron.js +172 -62
- package/koni/background/handlers/Extension.d.ts +8 -3
- package/koni/background/handlers/Extension.js +297 -126
- package/koni/background/handlers/State.d.ts +5 -6
- package/koni/background/handlers/State.js +43 -33
- package/koni/background/handlers/Tabs.js +50 -17
- package/koni/background/subscription.js +31 -30
- package/package.json +18 -13
- package/packageInfo.js +1 -1
- package/services/chain-service/handler/SubstrateChainHandler.js +14 -9
- 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 +3 -2
- package/services/chain-service/index.js +53 -40
- package/services/chain-service/types.d.ts +1 -0
- package/services/event-service/index.js +5 -1
- package/services/event-service/types.d.ts +5 -9
- package/services/event-service/types.js +4 -1
- package/services/history-service/index.d.ts +4 -2
- package/services/history-service/index.js +19 -13
- package/services/history-service/subsquid-multi-chain-history.js +16 -12
- package/services/keyring-service/index.d.ts +4 -2
- package/services/keyring-service/index.js +11 -13
- package/services/price-service/coingecko.js +0 -1
- package/services/price-service/index.js +2 -3
- package/services/request-service/handler/AuthRequestHandler.d.ts +3 -1
- package/services/request-service/handler/AuthRequestHandler.js +13 -7
- package/services/request-service/handler/EvmRequestHandler.js +8 -12
- package/services/request-service/index.d.ts +3 -1
- package/services/request-service/index.js +14 -5
- package/services/storage-service/DatabaseService.d.ts +1 -0
- package/services/storage-service/DatabaseService.js +56 -34
- package/services/storage-service/db-stores/Nft.d.ts +2 -2
- package/services/storage-service/db-stores/Nft.js +7 -14
- package/services/transaction-service/event-parser/index.js +21 -49
- package/services/transaction-service/index.js +26 -15
- package/utils/address.d.ts +3 -0
- package/utils/address.js +8 -1
- package/utils/index.d.ts +2 -2
- package/utils/index.js +7 -13
|
@@ -7,8 +7,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.ChainService = void 0;
|
|
8
8
|
var _chainList = require("@subwallet/chain-list");
|
|
9
9
|
var _types = require("@subwallet/chain-list/types");
|
|
10
|
-
var _constants = require("@subwallet/extension-base/constants");
|
|
11
|
-
var _constants2 = require("@subwallet/extension-base/services/chain-service/constants");
|
|
10
|
+
var _constants = require("@subwallet/extension-base/services/chain-service/constants");
|
|
12
11
|
var _EvmChainHandler = require("@subwallet/extension-base/services/chain-service/handler/EvmChainHandler");
|
|
13
12
|
var _SubstrateChainHandler = require("@subwallet/extension-base/services/chain-service/handler/SubstrateChainHandler");
|
|
14
13
|
var _types2 = require("@subwallet/extension-base/services/chain-service/handler/types");
|
|
@@ -51,7 +50,7 @@ class ChainService {
|
|
|
51
50
|
this.multiChainAssetMapSubject.next(_chainList.MultiChainAssetMap);
|
|
52
51
|
this.xcmRefMapSubject.next(this.getXcmRefMap());
|
|
53
52
|
this.logger = (0, _logger.logger)('chain-service');
|
|
54
|
-
this.refreshChainStateInterval(3000);
|
|
53
|
+
this.refreshChainStateInterval(3000, 6);
|
|
55
54
|
}
|
|
56
55
|
|
|
57
56
|
// Getter
|
|
@@ -286,7 +285,7 @@ class ChainService {
|
|
|
286
285
|
this.dbService.removeFromChainStore([slug]).catch(console.error);
|
|
287
286
|
this.updateChainSubscription();
|
|
288
287
|
this.lockChainInfoMap = false;
|
|
289
|
-
this.eventService.emit('chain.
|
|
288
|
+
this.eventService.emit('chain.updateState', slug);
|
|
290
289
|
return true;
|
|
291
290
|
}
|
|
292
291
|
resetChainInfoMap(excludedChains) {
|
|
@@ -296,7 +295,7 @@ class ChainService {
|
|
|
296
295
|
this.lockChainInfoMap = true;
|
|
297
296
|
const chainStateMap = this.getChainStateMap();
|
|
298
297
|
for (const [slug, chainState] of Object.entries(chainStateMap)) {
|
|
299
|
-
if (!
|
|
298
|
+
if (!_constants._DEFAULT_ACTIVE_CHAINS.includes(slug) && !(excludedChains !== null && excludedChains !== void 0 && excludedChains.includes(slug))) {
|
|
300
299
|
chainState.active = false;
|
|
301
300
|
}
|
|
302
301
|
}
|
|
@@ -352,7 +351,7 @@ class ChainService {
|
|
|
352
351
|
this.dbService.removeFromAssetStore(targetAssets).catch(e => this.logger.error(e));
|
|
353
352
|
this.assetRegistrySubject.next(assetRegistry);
|
|
354
353
|
targetAssets.forEach(assetSlug => {
|
|
355
|
-
this.eventService.emit('asset.
|
|
354
|
+
this.eventService.emit('asset.updateState', assetSlug);
|
|
356
355
|
});
|
|
357
356
|
}
|
|
358
357
|
|
|
@@ -419,14 +418,14 @@ class ChainService {
|
|
|
419
418
|
this.lockChainInfoMap = true;
|
|
420
419
|
chainStateMap[chainSlug].active = true;
|
|
421
420
|
this.initApiForChain(chainInfo);
|
|
422
|
-
this.refreshChainStateInterval(
|
|
421
|
+
this.refreshChainStateInterval(3000, 6);
|
|
423
422
|
this.dbService.updateChainStore({
|
|
424
423
|
...chainInfo,
|
|
425
424
|
active: true,
|
|
426
425
|
currentProvider: chainStateMap[chainSlug].currentProvider
|
|
427
426
|
}).catch(console.error);
|
|
428
427
|
this.lockChainInfoMap = false;
|
|
429
|
-
this.eventService.emit('chain.
|
|
428
|
+
this.eventService.emit('chain.updateState', chainSlug);
|
|
430
429
|
return true;
|
|
431
430
|
}
|
|
432
431
|
enableChain(chainSlug) {
|
|
@@ -461,7 +460,7 @@ class ChainService {
|
|
|
461
460
|
}).catch(console.error);
|
|
462
461
|
this.updateChainStateMapSubscription();
|
|
463
462
|
this.lockChainInfoMap = false;
|
|
464
|
-
this.eventService.emit('chain.
|
|
463
|
+
this.eventService.emit('chain.updateState', chainSlug);
|
|
465
464
|
return true;
|
|
466
465
|
}
|
|
467
466
|
checkExistedPredefinedChain(genesisHash, evmChainId) {
|
|
@@ -497,13 +496,13 @@ class ChainService {
|
|
|
497
496
|
currentProvider: Object.keys(chainInfo.providers)[0],
|
|
498
497
|
slug: chainInfo.slug,
|
|
499
498
|
connectionStatus: _types3._ChainConnectionStatus.DISCONNECTED,
|
|
500
|
-
active:
|
|
499
|
+
active: _constants._DEFAULT_ACTIVE_CHAINS.includes(chainInfo.slug)
|
|
501
500
|
};
|
|
502
501
|
|
|
503
502
|
// create data for storage
|
|
504
503
|
newStorageData.push({
|
|
505
504
|
...chainInfo,
|
|
506
|
-
active:
|
|
505
|
+
active: _constants._DEFAULT_ACTIVE_CHAINS.includes(chainInfo.slug),
|
|
507
506
|
currentProvider: Object.keys(chainInfo.providers)[0]
|
|
508
507
|
});
|
|
509
508
|
});
|
|
@@ -584,11 +583,11 @@ class ChainService {
|
|
|
584
583
|
currentProvider: Object.keys(chainInfo.providers)[0],
|
|
585
584
|
slug,
|
|
586
585
|
connectionStatus: _types3._ChainConnectionStatus.DISCONNECTED,
|
|
587
|
-
active:
|
|
586
|
+
active: _constants._DEFAULT_ACTIVE_CHAINS.includes(slug)
|
|
588
587
|
};
|
|
589
588
|
newStorageData.push({
|
|
590
589
|
...mergedChainInfoMap[slug],
|
|
591
|
-
active:
|
|
590
|
+
active: _constants._DEFAULT_ACTIVE_CHAINS.includes(slug),
|
|
592
591
|
currentProvider: Object.keys(chainInfo.providers)[0]
|
|
593
592
|
});
|
|
594
593
|
}
|
|
@@ -685,7 +684,7 @@ class ChainService {
|
|
|
685
684
|
active: targetChainState.active,
|
|
686
685
|
currentProvider: targetChainState.currentProvider
|
|
687
686
|
}).then(() => {
|
|
688
|
-
this.eventService.emit('chain.
|
|
687
|
+
this.eventService.emit('chain.updateState', chainSlug);
|
|
689
688
|
}).catch(e => this.logger.error(e));
|
|
690
689
|
}
|
|
691
690
|
insertChain(params) {
|
|
@@ -974,21 +973,23 @@ class ChainService {
|
|
|
974
973
|
}
|
|
975
974
|
async validateCustomToken(data) {
|
|
976
975
|
const assetRegistry = this.getSmartContractTokens();
|
|
977
|
-
let
|
|
976
|
+
let existedToken;
|
|
978
977
|
for (const token of Object.values(assetRegistry)) {
|
|
979
978
|
var _token$metadata2;
|
|
980
979
|
const contractAddress = token === null || token === void 0 ? void 0 : (_token$metadata2 = token.metadata) === null || _token$metadata2 === void 0 ? void 0 : _token$metadata2.contractAddress;
|
|
981
980
|
if ((0, _utils._isEqualContractAddress)(contractAddress, data.contractAddress) && token.assetType === data.type && token.originChain === data.originChain) {
|
|
982
|
-
|
|
981
|
+
existedToken = token;
|
|
983
982
|
break;
|
|
984
983
|
}
|
|
985
984
|
}
|
|
986
|
-
if (
|
|
985
|
+
if (existedToken) {
|
|
986
|
+
var _existedToken;
|
|
987
987
|
return {
|
|
988
|
-
decimals:
|
|
989
|
-
name:
|
|
990
|
-
symbol:
|
|
991
|
-
isExist,
|
|
988
|
+
decimals: existedToken.decimals || 0,
|
|
989
|
+
name: existedToken.name,
|
|
990
|
+
symbol: existedToken.symbol,
|
|
991
|
+
isExist: !!existedToken,
|
|
992
|
+
existedSlug: (_existedToken = existedToken) === null || _existedToken === void 0 ? void 0 : _existedToken.slug,
|
|
992
993
|
contractError: false
|
|
993
994
|
};
|
|
994
995
|
}
|
|
@@ -1002,7 +1003,7 @@ class ChainService {
|
|
|
1002
1003
|
name,
|
|
1003
1004
|
decimals,
|
|
1004
1005
|
symbol,
|
|
1005
|
-
isExist,
|
|
1006
|
+
isExist: !!existedToken,
|
|
1006
1007
|
contractError
|
|
1007
1008
|
};
|
|
1008
1009
|
}
|
|
@@ -1052,20 +1053,28 @@ class ChainService {
|
|
|
1052
1053
|
|
|
1053
1054
|
return this.substrateChainHandler.resumeAllApis();
|
|
1054
1055
|
}
|
|
1055
|
-
|
|
1056
|
-
|
|
1056
|
+
refreshChainStateTimeout = undefined;
|
|
1057
|
+
refreshChainStateTimes = 0;
|
|
1057
1058
|
refreshChainStateInterval() {
|
|
1058
1059
|
let delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
|
1060
|
+
let times = arguments.length > 1 ? arguments[1] : undefined;
|
|
1059
1061
|
clearTimeout(this.refreshChainStateTimeout);
|
|
1060
1062
|
setTimeout(() => {
|
|
1061
|
-
|
|
1063
|
+
if (times) {
|
|
1064
|
+
this.refreshChainStateTimes = times;
|
|
1065
|
+
}
|
|
1066
|
+
this.refreshChainStateTimes -= 1;
|
|
1067
|
+
if (this.refreshChainStateTimes < 0) {
|
|
1068
|
+
return;
|
|
1069
|
+
}
|
|
1070
|
+
this.updateApiMapStatus().catch(console.error);
|
|
1062
1071
|
this.refreshChainStateTimeout = setTimeout(() => {
|
|
1063
|
-
this.updateApiMapStatus();
|
|
1064
|
-
this.refreshChainStateInterval();
|
|
1065
|
-
},
|
|
1072
|
+
this.updateApiMapStatus().catch(console.error);
|
|
1073
|
+
this.refreshChainStateInterval(0);
|
|
1074
|
+
}, 3000);
|
|
1066
1075
|
}, delay);
|
|
1067
1076
|
}
|
|
1068
|
-
updateApiMapStatus() {
|
|
1077
|
+
async updateApiMapStatus() {
|
|
1069
1078
|
const substrateApiMap = this.getSubstrateApiMap();
|
|
1070
1079
|
const evmApiMap = this.getEvmApiMap();
|
|
1071
1080
|
const chainStateMap = this.getChainStateMap();
|
|
@@ -1076,25 +1085,31 @@ class ChainService {
|
|
|
1076
1085
|
update = true;
|
|
1077
1086
|
}
|
|
1078
1087
|
}
|
|
1079
|
-
Object.entries(chainStateMap).
|
|
1088
|
+
const promiseList = Object.entries(chainStateMap).map(async _ref4 => {
|
|
1080
1089
|
let [chain, chainState] = _ref4;
|
|
1081
|
-
|
|
1082
|
-
if (
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1090
|
+
try {
|
|
1091
|
+
if (chainState.active) {
|
|
1092
|
+
if (substrateApiMap[chain]) {
|
|
1093
|
+
const api = substrateApiMap[chain];
|
|
1094
|
+
if (api.isApiConnected) {
|
|
1095
|
+
updateState(chainState, _types3._ChainConnectionStatus.CONNECTED);
|
|
1096
|
+
return;
|
|
1097
|
+
}
|
|
1098
|
+
} else if (evmApiMap[chain]) {
|
|
1099
|
+
var _api$api;
|
|
1100
|
+
const api = evmApiMap[chain];
|
|
1101
|
+
if (await (api === null || api === void 0 ? void 0 : (_api$api = api.api) === null || _api$api === void 0 ? void 0 : _api$api.eth.net.isListening())) {
|
|
1102
|
+
updateState(chainState, _types3._ChainConnectionStatus.CONNECTED);
|
|
1103
|
+
return;
|
|
1104
|
+
}
|
|
1093
1105
|
}
|
|
1094
1106
|
}
|
|
1107
|
+
updateState(chainState, _types3._ChainConnectionStatus.DISCONNECTED);
|
|
1108
|
+
} catch (e) {
|
|
1109
|
+
updateState(chainState, _types3._ChainConnectionStatus.DISCONNECTED);
|
|
1095
1110
|
}
|
|
1096
|
-
updateState(chainState, _types3._ChainConnectionStatus.DISCONNECTED);
|
|
1097
1111
|
});
|
|
1112
|
+
await Promise.all(promiseList);
|
|
1098
1113
|
if (update) {
|
|
1099
1114
|
console.log('Update chain connection state');
|
|
1100
1115
|
this.chainStateMapSubject.next(chainStateMap);
|
|
@@ -1120,7 +1135,6 @@ class ChainService {
|
|
|
1120
1135
|
this.setAssetSettings(assetSettings, false);
|
|
1121
1136
|
}
|
|
1122
1137
|
this.eventService.emit('asset.ready', true);
|
|
1123
|
-
console.log('Done init asset settings');
|
|
1124
1138
|
}
|
|
1125
1139
|
setAssetSettings(assetSettings) {
|
|
1126
1140
|
let emitEvent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
@@ -1135,7 +1149,7 @@ class ChainService {
|
|
|
1135
1149
|
}
|
|
1136
1150
|
this.assetSettingSubject.next(assetSettings);
|
|
1137
1151
|
updateAssets.forEach(slug => {
|
|
1138
|
-
this.eventService.emit(
|
|
1152
|
+
this.eventService.emit('asset.updateState', slug);
|
|
1139
1153
|
});
|
|
1140
1154
|
this.store.set('AssetSetting', assetSettings);
|
|
1141
1155
|
}
|
|
@@ -42,7 +42,11 @@ class EventService extends _eventemitter.default {
|
|
|
42
42
|
}, this.lazyTime);
|
|
43
43
|
}
|
|
44
44
|
emitLazy() {
|
|
45
|
-
|
|
45
|
+
try {
|
|
46
|
+
this.lazyEmitter.emit('lazy', this.pendingEvents, this.pendingEvents.map(e => e.type));
|
|
47
|
+
} catch (e) {
|
|
48
|
+
console.error('Get error in some listener of lazy event', e);
|
|
49
|
+
}
|
|
46
50
|
this.pendingEvents = [];
|
|
47
51
|
this.timeoutId = null;
|
|
48
52
|
}
|
|
@@ -1 +1,11 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.COMMON_RELOAD_EVENTS = void 0;
|
|
7
|
+
// Copyright 2019-2022 @subwallet/extension-base
|
|
8
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
9
|
+
|
|
10
|
+
const COMMON_RELOAD_EVENTS = ['account.updateCurrent', 'asset.updateState', 'account.add', 'chain.updateState', 'account.remove', 'chain.add'];
|
|
11
|
+
exports.COMMON_RELOAD_EVENTS = COMMON_RELOAD_EVENTS;
|
|
@@ -5,9 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.HistoryService = void 0;
|
|
7
7
|
var _constants = require("@subwallet/extension-base/constants");
|
|
8
|
-
var _address = require("@subwallet/extension-base/utils/address");
|
|
9
8
|
var _uiKeyring = require("@subwallet/ui-keyring");
|
|
10
|
-
var _accounts = require("@subwallet/ui-keyring/observable/accounts");
|
|
11
9
|
var _rxjs = require("rxjs");
|
|
12
10
|
var _subsquidMultiChainHistory = require("./subsquid-multi-chain-history");
|
|
13
11
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
@@ -15,10 +13,11 @@ var _subsquidMultiChainHistory = require("./subsquid-multi-chain-history");
|
|
|
15
13
|
|
|
16
14
|
class HistoryService {
|
|
17
15
|
historySubject = new _rxjs.BehaviorSubject([]);
|
|
18
|
-
constructor(dbService, chainService, eventService) {
|
|
16
|
+
constructor(dbService, chainService, eventService, keyringService) {
|
|
19
17
|
this.dbService = dbService;
|
|
20
18
|
this.chainService = chainService;
|
|
21
19
|
this.eventService = eventService;
|
|
20
|
+
this.keyringService = keyringService;
|
|
22
21
|
// Load history from database
|
|
23
22
|
this.dbService.getHistories().then(histories => {
|
|
24
23
|
this.historySubject.next(histories);
|
|
@@ -47,7 +46,7 @@ class HistoryService {
|
|
|
47
46
|
const historyRecords = await (0, _subsquidMultiChainHistory.fetchMultiChainHistories)(addresses, chainMap);
|
|
48
47
|
|
|
49
48
|
// Fill additional info
|
|
50
|
-
const accountMap = Object.entries(
|
|
49
|
+
const accountMap = Object.entries(this.keyringService.accounts).reduce((map, _ref) => {
|
|
51
50
|
let [address, account] = _ref;
|
|
52
51
|
map[address.toLowerCase()] = account.json.meta.name || address;
|
|
53
52
|
return map;
|
|
@@ -57,7 +56,7 @@ class HistoryService {
|
|
|
57
56
|
record.fromName = accountMap[(_record$from = record.from) === null || _record$from === void 0 ? void 0 : _record$from.toLowerCase()];
|
|
58
57
|
record.toName = accountMap[(_record$to = record.to) === null || _record$to === void 0 ? void 0 : _record$to.toLowerCase()];
|
|
59
58
|
});
|
|
60
|
-
this.
|
|
59
|
+
await this.addHistoryItems(historyRecords);
|
|
61
60
|
return historyRecords;
|
|
62
61
|
}
|
|
63
62
|
async fetchHistories(addresses) {
|
|
@@ -82,8 +81,8 @@ class HistoryService {
|
|
|
82
81
|
const addressList = _uiKeyring.keyring.getAccounts().map(a => a.address);
|
|
83
82
|
const currentHistories = this.historySubject.value;
|
|
84
83
|
if (!this.fetchPromise || currentHistories.length === 0) {
|
|
85
|
-
|
|
86
|
-
this.historySubject.next(
|
|
84
|
+
await this.fetchHistories(addressList);
|
|
85
|
+
this.historySubject.next(await this.dbService.getHistories());
|
|
87
86
|
}
|
|
88
87
|
return this.historySubject.getValue();
|
|
89
88
|
}
|
|
@@ -91,10 +90,6 @@ class HistoryService {
|
|
|
91
90
|
await this.getHistories();
|
|
92
91
|
return this.historySubject;
|
|
93
92
|
}
|
|
94
|
-
async insertHistories(historyItems) {
|
|
95
|
-
await this.dbService.upsertHistory(historyItems);
|
|
96
|
-
this.historySubject.next(await this.dbService.getHistories());
|
|
97
|
-
}
|
|
98
93
|
async updateHistories(chain, extrinsicHash, updateData) {
|
|
99
94
|
const existedRecords = await this.dbService.getHistories({
|
|
100
95
|
chain,
|
|
@@ -108,14 +103,25 @@ class HistoryService {
|
|
|
108
103
|
});
|
|
109
104
|
await this.addHistoryItems(updatedRecords);
|
|
110
105
|
}
|
|
106
|
+
|
|
107
|
+
// Insert history without check override origin 'app'
|
|
108
|
+
async insertHistories(historyItems) {
|
|
109
|
+
await this.dbService.upsertHistory(historyItems);
|
|
110
|
+
this.historySubject.next(await this.dbService.getHistories());
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Insert history with check override origin 'app'
|
|
111
114
|
async addHistoryItems(historyItems) {
|
|
112
115
|
// Prevent override record with original is 'app'
|
|
113
116
|
const appRecords = this.historySubject.value.filter(item => item.origin === 'app');
|
|
114
117
|
const excludeKeys = appRecords.map(item => {
|
|
115
|
-
return `${item.chain}-${
|
|
118
|
+
return `${item.chain}-${item.extrinsicHash}`;
|
|
116
119
|
});
|
|
117
120
|
const updateRecords = historyItems.filter(item => {
|
|
118
|
-
const key = `${item.chain}-${
|
|
121
|
+
const key = `${item.chain}-${item.extrinsicHash}`;
|
|
122
|
+
|
|
123
|
+
// !excludeKeys.includes(key) && console.log('Cancel update', key);
|
|
124
|
+
|
|
119
125
|
return item.origin === 'app' || !excludeKeys.includes(key);
|
|
120
126
|
});
|
|
121
127
|
await this.dbService.upsertHistory(updateRecords);
|
|
@@ -67,12 +67,15 @@ function autoFormatAddress(address) {
|
|
|
67
67
|
return '';
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
-
function generateSignature(
|
|
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);
|
|
@@ -118,7 +121,7 @@ function parseSubsquidTransactionData(address, type, historyItem, chainInfo, arg
|
|
|
118
121
|
const transaction = data.call.data.args.transaction.value;
|
|
119
122
|
to = autoFormatAddress(parsedArgs.to);
|
|
120
123
|
from = autoFormatAddress(parsedArgs.from);
|
|
121
|
-
extrinsicHash = parsedArgs.transactionHash;
|
|
124
|
+
extrinsicHash = parsedArgs.transactionHash || extrinsic.hash;
|
|
122
125
|
amount = transaction.value || '0';
|
|
123
126
|
fee = (parseInt(transaction.gasPrice) * parseInt(transaction.gasLimit)).toString();
|
|
124
127
|
signature = generateSignature(transaction.signature);
|
|
@@ -255,14 +258,14 @@ async function fetchMultiChainHistories(addresses, chainMap) {
|
|
|
255
258
|
console.warn(`Not found chain info for chain id: ${chainId}`);
|
|
256
259
|
return;
|
|
257
260
|
}
|
|
258
|
-
|
|
259
|
-
|
|
261
|
+
usedAddresses.forEach(address => {
|
|
262
|
+
try {
|
|
260
263
|
const transactionData = parseSubsquidTransactionData(address, name, historyItem, chainInfo, parseData(args), parseData(_data));
|
|
261
264
|
histories.push(transactionData);
|
|
262
|
-
})
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
}
|
|
265
|
+
} catch (e) {
|
|
266
|
+
console.warn('Parse transaction data failed', address, e);
|
|
267
|
+
}
|
|
268
|
+
});
|
|
266
269
|
});
|
|
267
270
|
return histories;
|
|
268
271
|
}
|
|
@@ -16,8 +16,9 @@ class KeyringService {
|
|
|
16
16
|
address: '',
|
|
17
17
|
currentGenesisHash: null
|
|
18
18
|
});
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
addressesSubject = _uiKeyring.keyring.addresses.subject;
|
|
20
|
+
accountSubject = _uiKeyring.keyring.accounts.subject;
|
|
21
|
+
beforeAccount = this.accountSubject.value;
|
|
21
22
|
keyringStateSubject = new _rxjs.BehaviorSubject({
|
|
22
23
|
isReady: false,
|
|
23
24
|
hasMasterPassword: false,
|
|
@@ -26,23 +27,17 @@ class KeyringService {
|
|
|
26
27
|
constructor(eventService) {
|
|
27
28
|
this.eventService = eventService;
|
|
28
29
|
this.currentAccountStore.get('CurrentAccountInfo', rs => {
|
|
29
|
-
this.currentAccountSubject.next(rs);
|
|
30
|
+
rs && this.currentAccountSubject.next(rs);
|
|
30
31
|
});
|
|
31
32
|
this.subscribeAccounts().catch(console.error);
|
|
32
33
|
}
|
|
33
34
|
async subscribeAccounts() {
|
|
34
35
|
// Wait until account ready
|
|
35
|
-
await
|
|
36
|
-
const onReady = () => {
|
|
37
|
-
this.eventService.off('account.ready', onReady);
|
|
38
|
-
resolve(true);
|
|
39
|
-
};
|
|
40
|
-
this.eventService.on('account.ready', onReady);
|
|
41
|
-
});
|
|
36
|
+
await this.eventService.waitAccountReady;
|
|
42
37
|
this.beforeAccount = {
|
|
43
|
-
...this.
|
|
38
|
+
...this.accountSubject.value
|
|
44
39
|
};
|
|
45
|
-
this.
|
|
40
|
+
this.accountSubject.subscribe(subjectInfo => {
|
|
46
41
|
// Check if accounts changed
|
|
47
42
|
const beforeAddresses = Object.keys(this.beforeAccount);
|
|
48
43
|
const afterAddresses = Object.keys(subjectInfo);
|
|
@@ -87,7 +82,10 @@ class KeyringService {
|
|
|
87
82
|
});
|
|
88
83
|
}
|
|
89
84
|
get accounts() {
|
|
90
|
-
return this.
|
|
85
|
+
return this.accountSubject.value;
|
|
86
|
+
}
|
|
87
|
+
get addresses() {
|
|
88
|
+
return this.addressesSubject.value;
|
|
91
89
|
}
|
|
92
90
|
get currentAccount() {
|
|
93
91
|
return this.currentAccountSubject.value;
|
|
@@ -24,7 +24,6 @@ const getTokenPrice = async function (priceIds) {
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
if (useBackupApi || ((_res = res) === null || _res === void 0 ? void 0 : _res.status) !== 200) {
|
|
27
|
-
console.log('Use backup api for price');
|
|
28
27
|
useBackupApi = true;
|
|
29
28
|
res = await _axios.default.get(`https://chain-data.subwallet.app/api/price/get?ids=${idStr}`);
|
|
30
29
|
}
|
|
@@ -37,8 +37,8 @@ class PriceService {
|
|
|
37
37
|
};
|
|
38
38
|
this.eventService.waitAssetReady.then(() => {
|
|
39
39
|
this.refreshPriceData();
|
|
40
|
-
this.eventService.on('asset.
|
|
41
|
-
this.eventService.on('asset.
|
|
40
|
+
this.eventService.on('asset.updateState', eventHandler);
|
|
41
|
+
this.eventService.on('asset.updateState', eventHandler);
|
|
42
42
|
}).catch(console.error);
|
|
43
43
|
}
|
|
44
44
|
async getPrice() {
|
|
@@ -68,7 +68,6 @@ class PriceService {
|
|
|
68
68
|
ready: true
|
|
69
69
|
});
|
|
70
70
|
this.dbService.updatePriceStore(rs).catch(console.error);
|
|
71
|
-
console.log('Get Token Price From CoinGecko');
|
|
72
71
|
}).catch(console.error);
|
|
73
72
|
this.refreshTimeout = setTimeout(this.refreshPriceData.bind(this), _constants.CRON_REFRESH_PRICE_INTERVAL);
|
|
74
73
|
}
|
|
@@ -10,7 +10,6 @@ var _constants = require("@subwallet/extension-base/services/request-service/con
|
|
|
10
10
|
var _Authorize = _interopRequireDefault(require("@subwallet/extension-base/stores/Authorize"));
|
|
11
11
|
var _utils2 = require("@subwallet/extension-base/utils");
|
|
12
12
|
var _getId = require("@subwallet/extension-base/utils/getId");
|
|
13
|
-
var _accounts = require("@subwallet/ui-keyring/observable/accounts");
|
|
14
13
|
var _rxjs = require("rxjs");
|
|
15
14
|
var _util = require("@polkadot/util");
|
|
16
15
|
var _utilCrypto = require("@polkadot/util-crypto");
|
|
@@ -27,7 +26,8 @@ class AuthRequestHandler {
|
|
|
27
26
|
authorizeUrlSubject = new _rxjs.Subject();
|
|
28
27
|
evmChainSubject = new _rxjs.Subject();
|
|
29
28
|
authSubjectV2 = new _rxjs.BehaviorSubject([]);
|
|
30
|
-
constructor(requestService, chainService) {
|
|
29
|
+
constructor(requestService, chainService, keyringService) {
|
|
30
|
+
this.keyringService = keyringService;
|
|
31
31
|
this.#requestService = requestService;
|
|
32
32
|
this.#chainService = chainService;
|
|
33
33
|
}
|
|
@@ -38,7 +38,7 @@ class AuthRequestHandler {
|
|
|
38
38
|
}
|
|
39
39
|
getAddressList() {
|
|
40
40
|
let value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
41
|
-
const addressList = Object.keys(
|
|
41
|
+
const addressList = Object.keys(this.keyringService.accounts);
|
|
42
42
|
return addressList.reduce((addressList, v) => ({
|
|
43
43
|
...addressList,
|
|
44
44
|
[v]: value
|
|
@@ -95,11 +95,11 @@ class AuthRequestHandler {
|
|
|
95
95
|
const chainInfoMaps = this.#chainService.getChainInfoMap();
|
|
96
96
|
const chainStateMap = this.#chainService.getChainStateMap();
|
|
97
97
|
let defaultChain = options.defaultChain;
|
|
98
|
-
|
|
98
|
+
let needEnableChains = [];
|
|
99
99
|
if (options.url) {
|
|
100
100
|
const domain = (0, _utils2.getDomainFromUrl)(options.url);
|
|
101
101
|
const predefinedSupportChains = _constants.PREDEFINED_CHAIN_DAPP_CHAIN_MAP[domain];
|
|
102
|
-
if (predefinedSupportChains) {
|
|
102
|
+
if (!defaultChain && predefinedSupportChains) {
|
|
103
103
|
defaultChain = predefinedSupportChains[0];
|
|
104
104
|
options.autoActive && needEnableChains.push(...predefinedSupportChains);
|
|
105
105
|
}
|
|
@@ -112,11 +112,17 @@ class AuthRequestHandler {
|
|
|
112
112
|
return (_chainStateMap$chain$ = chainStateMap[chain.slug]) === null || _chainStateMap$chain$ === void 0 ? void 0 : _chainStateMap$chain$.active;
|
|
113
113
|
})) || evmChains[0];
|
|
114
114
|
if (options.autoActive) {
|
|
115
|
-
|
|
116
|
-
|
|
115
|
+
var _chainInfo;
|
|
116
|
+
if (!needEnableChains.includes((_chainInfo = chainInfo) === null || _chainInfo === void 0 ? void 0 : _chainInfo.slug)) {
|
|
117
|
+
var _chainInfo2;
|
|
118
|
+
needEnableChains.push((_chainInfo2 = chainInfo) === null || _chainInfo2 === void 0 ? void 0 : _chainInfo2.slug);
|
|
117
119
|
}
|
|
118
120
|
}
|
|
119
121
|
}
|
|
122
|
+
needEnableChains = needEnableChains.filter(slug => {
|
|
123
|
+
var _chainStateMap$slug;
|
|
124
|
+
return !((_chainStateMap$slug = chainStateMap[slug]) !== null && _chainStateMap$slug !== void 0 && _chainStateMap$slug.active);
|
|
125
|
+
});
|
|
120
126
|
needEnableChains.length > 0 && this.#chainService.enableChains(needEnableChains);
|
|
121
127
|
return chainInfo;
|
|
122
128
|
}
|
|
@@ -76,16 +76,7 @@ class EvmRequestHandler {
|
|
|
76
76
|
});
|
|
77
77
|
this.confirmationsQueueSubject.next(confirmations);
|
|
78
78
|
if (!isInternal) {
|
|
79
|
-
|
|
80
|
-
const popupList = this.#requestService.popup;
|
|
81
|
-
if (this.#requestService.popup.length > 0) {
|
|
82
|
-
// eslint-disable-next-line no-void
|
|
83
|
-
void chrome.windows.update(popupList[0], {
|
|
84
|
-
focused: true
|
|
85
|
-
});
|
|
86
|
-
} else {
|
|
87
|
-
this.#requestService.popupOpen();
|
|
88
|
-
}
|
|
79
|
+
this.#requestService.popupOpen();
|
|
89
80
|
}
|
|
90
81
|
this.#requestService.updateIconV2();
|
|
91
82
|
return promise;
|
|
@@ -136,7 +127,8 @@ class EvmRequestHandler {
|
|
|
136
127
|
data: (0, _ethereumjsUtil.toBuffer)(config.data)
|
|
137
128
|
};
|
|
138
129
|
const common = _common.default.custom({
|
|
139
|
-
chainId: config.chainId
|
|
130
|
+
chainId: config.chainId,
|
|
131
|
+
defaultHardfork: 'petersburg'
|
|
140
132
|
});
|
|
141
133
|
|
|
142
134
|
// @ts-ignore
|
|
@@ -149,11 +141,15 @@ class EvmRequestHandler {
|
|
|
149
141
|
const {
|
|
150
142
|
estimateGas,
|
|
151
143
|
from,
|
|
152
|
-
|
|
144
|
+
gas,
|
|
145
|
+
gasPrice,
|
|
146
|
+
value
|
|
153
147
|
} = transaction;
|
|
154
148
|
const pair = _uiKeyring.default.getPair(from);
|
|
155
149
|
const params = {
|
|
156
150
|
...transaction,
|
|
151
|
+
gas: (0, _eth.anyNumberToBN)(gas).toNumber(),
|
|
152
|
+
value: (0, _eth.anyNumberToBN)(value).toNumber(),
|
|
157
153
|
gasPrice: (0, _eth.anyNumberToBN)(gasPrice).toNumber(),
|
|
158
154
|
gasLimit: (0, _eth.anyNumberToBN)(estimateGas).toNumber()
|
|
159
155
|
// nonce: await web3.eth.getTransactionCount(from) // Todo: fill this value from transaction service
|
|
@@ -10,7 +10,6 @@ var _EvmRequestHandler = _interopRequireDefault(require("@subwallet/extension-ba
|
|
|
10
10
|
var _MetadataRequestHandler = _interopRequireDefault(require("@subwallet/extension-base/services/request-service/handler/MetadataRequestHandler"));
|
|
11
11
|
var _PopupHandler = _interopRequireDefault(require("@subwallet/extension-base/services/request-service/handler/PopupHandler"));
|
|
12
12
|
var _SubstrateRequestHandler = _interopRequireDefault(require("@subwallet/extension-base/services/request-service/handler/SubstrateRequestHandler"));
|
|
13
|
-
var _accounts = require("@subwallet/ui-keyring/observable/accounts");
|
|
14
13
|
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
15
14
|
// SPDX-License-Identifier: Apache-2.0
|
|
16
15
|
|
|
@@ -24,12 +23,13 @@ class RequestService {
|
|
|
24
23
|
#evmRequestHandler;
|
|
25
24
|
|
|
26
25
|
// Common
|
|
27
|
-
constructor(chainService, settingService) {
|
|
26
|
+
constructor(chainService, settingService, keyringService) {
|
|
27
|
+
this.keyringService = keyringService;
|
|
28
28
|
this.#chainService = chainService;
|
|
29
29
|
this.settingService = settingService;
|
|
30
30
|
this.#popupHandler = new _PopupHandler.default(this);
|
|
31
31
|
this.#metadataRequestHandler = new _MetadataRequestHandler.default(this);
|
|
32
|
-
this.#authRequestHandler = new _AuthRequestHandler.default(this, this.#chainService);
|
|
32
|
+
this.#authRequestHandler = new _AuthRequestHandler.default(this, this.#chainService, this.keyringService);
|
|
33
33
|
this.#substrateRequestHandler = new _SubstrateRequestHandler.default(this);
|
|
34
34
|
this.#evmRequestHandler = new _EvmRequestHandler.default(this);
|
|
35
35
|
|
|
@@ -44,7 +44,7 @@ class RequestService {
|
|
|
44
44
|
}
|
|
45
45
|
getAddressList() {
|
|
46
46
|
let value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
47
|
-
const addressList = Object.keys(
|
|
47
|
+
const addressList = Object.keys(this.keyringService.accounts);
|
|
48
48
|
return addressList.reduce((addressList, v) => ({
|
|
49
49
|
...addressList,
|
|
50
50
|
[v]: value
|
|
@@ -59,7 +59,16 @@ class RequestService {
|
|
|
59
59
|
this.#popupHandler.popupClose();
|
|
60
60
|
}
|
|
61
61
|
popupOpen() {
|
|
62
|
-
|
|
62
|
+
// Not open new popup and use existed
|
|
63
|
+
const popupList = this.#popupHandler.popup;
|
|
64
|
+
if (popupList && popupList.length > 0) {
|
|
65
|
+
var _chrome$windows$updat;
|
|
66
|
+
(_chrome$windows$updat = chrome.windows.update(popupList[0], {
|
|
67
|
+
focused: true
|
|
68
|
+
})) === null || _chrome$windows$updat === void 0 ? void 0 : _chrome$windows$updat.catch(console.error);
|
|
69
|
+
} else {
|
|
70
|
+
this.#popupHandler.popupOpen();
|
|
71
|
+
}
|
|
63
72
|
}
|
|
64
73
|
|
|
65
74
|
// Metadata
|