@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
|
@@ -3,9 +3,15 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.EXTENSION_REQUEST_URL = void 0;
|
|
6
|
+
exports.PREDEFINED_CHAIN_DAPP_CHAIN_MAP = exports.EXTENSION_REQUEST_URL = void 0;
|
|
7
7
|
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
8
8
|
// SPDX-License-Identifier: Apache-2.0
|
|
9
9
|
|
|
10
10
|
const EXTENSION_REQUEST_URL = 'extension';
|
|
11
|
-
exports.EXTENSION_REQUEST_URL = EXTENSION_REQUEST_URL;
|
|
11
|
+
exports.EXTENSION_REQUEST_URL = EXTENSION_REQUEST_URL;
|
|
12
|
+
const PREDEFINED_CHAIN_DAPP_CHAIN_MAP = {
|
|
13
|
+
'portal.astar.network': ['astar', 'astarEvm'],
|
|
14
|
+
'apps.moonbeam.network': ['moonbeam', 'moonriver'],
|
|
15
|
+
'app.stellaswap.com': ['moonbeam']
|
|
16
|
+
};
|
|
17
|
+
exports.PREDEFINED_CHAIN_DAPP_CHAIN_MAP = PREDEFINED_CHAIN_DAPP_CHAIN_MAP;
|
|
@@ -6,7 +6,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.default = void 0;
|
|
8
8
|
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
9
|
+
var _constants = require("@subwallet/extension-base/services/request-service/constants");
|
|
9
10
|
var _Authorize = _interopRequireDefault(require("@subwallet/extension-base/stores/Authorize"));
|
|
11
|
+
var _utils2 = require("@subwallet/extension-base/utils");
|
|
10
12
|
var _getId = require("@subwallet/extension-base/utils/getId");
|
|
11
13
|
var _accounts = require("@subwallet/ui-keyring/observable/accounts");
|
|
12
14
|
var _rxjs = require("rxjs");
|
|
@@ -89,9 +91,43 @@ class AuthRequestHandler {
|
|
|
89
91
|
});
|
|
90
92
|
});
|
|
91
93
|
}
|
|
92
|
-
|
|
94
|
+
getDAppChainInfo(options) {
|
|
95
|
+
const chainInfoMaps = this.#chainService.getChainInfoMap();
|
|
96
|
+
const chainStateMap = this.#chainService.getChainStateMap();
|
|
97
|
+
let defaultChain = options.defaultChain;
|
|
98
|
+
let needEnableChains = [];
|
|
99
|
+
if (options.url) {
|
|
100
|
+
const domain = (0, _utils2.getDomainFromUrl)(options.url);
|
|
101
|
+
const predefinedSupportChains = _constants.PREDEFINED_CHAIN_DAPP_CHAIN_MAP[domain];
|
|
102
|
+
if (!defaultChain && predefinedSupportChains) {
|
|
103
|
+
defaultChain = predefinedSupportChains[0];
|
|
104
|
+
options.autoActive && needEnableChains.push(...predefinedSupportChains);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
let chainInfo;
|
|
108
|
+
if (['both', 'evm'].includes(options.accessType)) {
|
|
109
|
+
const evmChains = Object.values(chainInfoMaps).filter(_utils._isChainEvmCompatible);
|
|
110
|
+
chainInfo = (defaultChain ? chainInfoMaps[defaultChain] : evmChains.find(chain => {
|
|
111
|
+
var _chainStateMap$chain$;
|
|
112
|
+
return (_chainStateMap$chain$ = chainStateMap[chain.slug]) === null || _chainStateMap$chain$ === void 0 ? void 0 : _chainStateMap$chain$.active;
|
|
113
|
+
})) || evmChains[0];
|
|
114
|
+
if (options.autoActive) {
|
|
115
|
+
if (!needEnableChains.includes(chainInfo.slug)) {
|
|
116
|
+
needEnableChains.push(chainInfo.slug);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
needEnableChains = needEnableChains.filter(slug => {
|
|
121
|
+
var _chainStateMap$slug;
|
|
122
|
+
return !((_chainStateMap$slug = chainStateMap[slug]) !== null && _chainStateMap$slug !== void 0 && _chainStateMap$slug.active);
|
|
123
|
+
});
|
|
124
|
+
needEnableChains.length > 0 && this.#chainService.enableChains(needEnableChains);
|
|
125
|
+
return chainInfo;
|
|
126
|
+
}
|
|
127
|
+
authCompleteV2 = (id, url, resolve, reject) => {
|
|
93
128
|
const isAllowedMap = this.getAddressList();
|
|
94
129
|
const complete = (result, cb, accounts) => {
|
|
130
|
+
var _this$getDAppChainInf;
|
|
95
131
|
const isAllowed = result === true;
|
|
96
132
|
let isCancelled = false;
|
|
97
133
|
if (!isAllowed && typeof result === 'object' && result.message === 'Cancelled') {
|
|
@@ -124,16 +160,11 @@ class AuthRequestHandler {
|
|
|
124
160
|
isAllowedMap[acc] = true;
|
|
125
161
|
});
|
|
126
162
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
});
|
|
133
|
-
if (defaultChain) {
|
|
134
|
-
defaultEvmNetworkKey = defaultChain.slug;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
163
|
+
const defaultEvmNetworkKey = (_this$getDAppChainInf = this.getDAppChainInfo({
|
|
164
|
+
accessType: accountAuthType,
|
|
165
|
+
url,
|
|
166
|
+
autoActive: !isCancelled && isAllowed
|
|
167
|
+
})) === null || _this$getDAppChainInf === void 0 ? void 0 : _this$getDAppChainInf.slug;
|
|
137
168
|
this.getAuthorize(value => {
|
|
138
169
|
let authorizeList = {};
|
|
139
170
|
if (value) {
|
|
@@ -224,7 +255,7 @@ class AuthRequestHandler {
|
|
|
224
255
|
return new Promise((resolve, reject) => {
|
|
225
256
|
const id = (0, _getId.getId)();
|
|
226
257
|
this.#authRequestsV2[id] = {
|
|
227
|
-
...this.authCompleteV2(id, resolve, reject),
|
|
258
|
+
...this.authCompleteV2(id, url, resolve, reject),
|
|
228
259
|
id,
|
|
229
260
|
idStr,
|
|
230
261
|
request,
|
|
@@ -104,6 +104,9 @@ class RequestService {
|
|
|
104
104
|
getAuthRequestV2(id) {
|
|
105
105
|
return this.#authRequestHandler.getAuthRequestV2(id);
|
|
106
106
|
}
|
|
107
|
+
getDAppChainInfo(options) {
|
|
108
|
+
return this.#authRequestHandler.getDAppChainInfo(options);
|
|
109
|
+
}
|
|
107
110
|
get subscribeEvmChainChange() {
|
|
108
111
|
return this.#authRequestHandler.subscribeEvmChainChange;
|
|
109
112
|
}
|
|
@@ -10,6 +10,7 @@ var _databases = _interopRequireDefault(require("@subwallet/extension-base/servi
|
|
|
10
10
|
var _dbStores = require("@subwallet/extension-base/services/storage-service/db-stores");
|
|
11
11
|
var _ChainStakingMetadata = _interopRequireDefault(require("@subwallet/extension-base/services/storage-service/db-stores/ChainStakingMetadata"));
|
|
12
12
|
var _NominatorMetadata = _interopRequireDefault(require("@subwallet/extension-base/services/storage-service/db-stores/NominatorMetadata"));
|
|
13
|
+
var _utils = require("@subwallet/extension-base/utils");
|
|
13
14
|
var _util = require("@polkadot/util");
|
|
14
15
|
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
15
16
|
// SPDX-License-Identifier: Apache-2.0
|
|
@@ -54,7 +55,8 @@ class DatabaseService {
|
|
|
54
55
|
}
|
|
55
56
|
async updateBalanceStore(address, item) {
|
|
56
57
|
if (item.state === _KoniTypes.APIItemState.READY) {
|
|
57
|
-
this.logger.log(`Updating balance for [${item.tokenSlug}]`);
|
|
58
|
+
// this.logger.log(`Updating balance for [${item.tokenSlug}]`);
|
|
59
|
+
|
|
58
60
|
return this.stores.balance.upsert({
|
|
59
61
|
address,
|
|
60
62
|
...item
|
|
@@ -69,14 +71,16 @@ class DatabaseService {
|
|
|
69
71
|
// Crowdloan
|
|
70
72
|
async updateCrowdloanStore(chain, address, item) {
|
|
71
73
|
if (item.state === _KoniTypes.APIItemState.READY && item.contribute !== '0') {
|
|
72
|
-
this.logger.log(`Updating crowdloan for [${chain}]`);
|
|
74
|
+
// this.logger.log(`Updating crowdloan for [${chain}]`);
|
|
75
|
+
|
|
73
76
|
return this.stores.crowdloan.upsert({
|
|
74
77
|
chain,
|
|
75
78
|
address,
|
|
76
79
|
...item
|
|
77
80
|
});
|
|
78
81
|
} else {
|
|
79
|
-
this.logger.debug(`Removing crowdloan for [${chain}]`);
|
|
82
|
+
// this.logger.debug(`Removing crowdloan for [${chain}]`);
|
|
83
|
+
|
|
80
84
|
return this.stores.crowdloan.deleteByChainAndAddress(chain, address);
|
|
81
85
|
}
|
|
82
86
|
}
|
|
@@ -84,22 +88,23 @@ class DatabaseService {
|
|
|
84
88
|
// Staking
|
|
85
89
|
async updateStaking(chain, address, item) {
|
|
86
90
|
if (item.state === _KoniTypes.APIItemState.READY) {
|
|
87
|
-
this.logger.log(`Updating staking for [${chain}]`);
|
|
91
|
+
// this.logger.log(`Updating staking for [${chain}]`);
|
|
92
|
+
|
|
88
93
|
return this.stores.staking.upsert(item);
|
|
89
94
|
}
|
|
90
95
|
}
|
|
91
96
|
async getStakings(addresses, chains) {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
return
|
|
97
|
+
// this.logger.log('Get Stakings: ', stakings);
|
|
98
|
+
|
|
99
|
+
return this.stores.staking.getStakings(addresses, chains);
|
|
95
100
|
}
|
|
96
101
|
async getStakingsByChains(chains) {
|
|
97
102
|
return this.stores.staking.getStakingsByChains(chains);
|
|
98
103
|
}
|
|
99
104
|
async getPooledStakings(addresses, chainHashes) {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
return
|
|
105
|
+
// this.logger.log('Get Pooled Stakings: ', stakings);
|
|
106
|
+
|
|
107
|
+
return this.stores.staking.getPooledStakings(addresses, chainHashes);
|
|
103
108
|
}
|
|
104
109
|
subscribeStaking(addresses, chainList, callback) {
|
|
105
110
|
this.stakingSubscription && this.stakingSubscription.unsubscribe();
|
|
@@ -121,18 +126,18 @@ class DatabaseService {
|
|
|
121
126
|
|
|
122
127
|
// Transaction histories
|
|
123
128
|
async getHistories(query) {
|
|
124
|
-
|
|
125
|
-
this.logger.log('Get histories: ', histories);
|
|
126
|
-
return histories;
|
|
129
|
+
return this.stores.transaction.queryHistory(query);
|
|
127
130
|
}
|
|
128
131
|
async upsertHistory(histories) {
|
|
129
|
-
this.logger.log('Updating transaction histories');
|
|
132
|
+
// this.logger.log('Updating transaction histories');
|
|
133
|
+
|
|
130
134
|
return this.stores.transaction.bulkUpsert(histories);
|
|
131
135
|
}
|
|
132
136
|
|
|
133
137
|
// NFT Collection
|
|
134
138
|
async addNftCollection(collection) {
|
|
135
|
-
this.logger.log(`Updating NFT collection for [${collection.chain}]`);
|
|
139
|
+
// this.logger.log(`Updating NFT collection for [${collection.chain}]`);
|
|
140
|
+
|
|
136
141
|
return this.stores.nftCollection.upsert(collection);
|
|
137
142
|
}
|
|
138
143
|
async deleteNftCollection(chain, collectionId) {
|
|
@@ -151,63 +156,76 @@ class DatabaseService {
|
|
|
151
156
|
});
|
|
152
157
|
return this.nftSubscription;
|
|
153
158
|
}
|
|
159
|
+
async cleanUpNft(chain, owner, collectionId, nftIds) {
|
|
160
|
+
const result = await this.stores.nft.cleanUpNfts(chain, (0, _utils.reformatAddress)(owner, 42), collectionId, nftIds);
|
|
161
|
+
result > 0 && console.debug(`Clean up ${result} NFTs from collection ${collectionId} on chain ${chain} for owner ${owner}`);
|
|
162
|
+
return result;
|
|
163
|
+
}
|
|
154
164
|
async getNft(addresses, chainHashes) {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
return
|
|
165
|
+
// this.logger.log('Get NFTs: ', nfts);
|
|
166
|
+
|
|
167
|
+
return this.stores.nft.getNft(addresses, chainHashes);
|
|
158
168
|
}
|
|
159
169
|
async addNft(address, nft) {
|
|
160
|
-
this.logger.log(`Updating NFT for [${nft.chain}]`);
|
|
170
|
+
// this.logger.log(`Updating NFT for [${nft.chain}]`);
|
|
171
|
+
|
|
161
172
|
return this.stores.nft.upsert({
|
|
162
173
|
...nft,
|
|
163
174
|
address
|
|
164
175
|
});
|
|
165
176
|
}
|
|
166
177
|
handleNftTransfer(chain, addresses, nftItem) {
|
|
167
|
-
return this.stores.nft.
|
|
178
|
+
return this.stores.nft.deleteNftItem(chain, addresses, nftItem);
|
|
168
179
|
}
|
|
169
180
|
removeNfts(chain, address, collectionId, nftIds) {
|
|
170
|
-
this.logger.log(`Remove NFTs [${nftIds.join(', ')}]`);
|
|
181
|
+
// this.logger.log(`Remove NFTs [${nftIds.join(', ')}]`);
|
|
182
|
+
|
|
171
183
|
return this.stores.nft.removeNfts(chain, address, collectionId, nftIds);
|
|
172
184
|
}
|
|
173
185
|
|
|
174
186
|
// Chain
|
|
175
187
|
async updateChainStore(item) {
|
|
176
|
-
this.logger.log(`Updating storageInfo for chain [${item.slug}]`);
|
|
188
|
+
// this.logger.log(`Updating storageInfo for chain [${item.slug}]`);
|
|
189
|
+
|
|
177
190
|
return this.stores.chain.upsert(item);
|
|
178
191
|
}
|
|
179
192
|
async bulkUpdateChainStore(data) {
|
|
180
|
-
this.logger.log('Bulk updating ChainStore');
|
|
193
|
+
// this.logger.log('Bulk updating ChainStore');
|
|
194
|
+
|
|
181
195
|
return this.stores.chain.bulkUpsert(data);
|
|
182
196
|
}
|
|
183
197
|
async removeFromChainStore(chains) {
|
|
184
|
-
this.logger.log('Bulk removing ChainStore');
|
|
198
|
+
// this.logger.log('Bulk removing ChainStore');
|
|
199
|
+
|
|
185
200
|
return this.stores.chain.removeChains(chains);
|
|
186
201
|
}
|
|
187
202
|
async getAllChainStore() {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
return
|
|
203
|
+
// this.logger.log('Get all chains: ', allChains);
|
|
204
|
+
|
|
205
|
+
return this.stores.chain.getAll();
|
|
191
206
|
}
|
|
192
207
|
|
|
193
208
|
// Asset
|
|
194
209
|
async updateAssetStore(item) {
|
|
195
|
-
this.logger.log(`Updating storageInfo for chainAsset [${item.originChain}]`);
|
|
210
|
+
// this.logger.log(`Updating storageInfo for chainAsset [${item.originChain}]`);
|
|
211
|
+
|
|
196
212
|
return this.stores.asset.upsert(item);
|
|
197
213
|
}
|
|
198
214
|
async getAllAssetStore() {
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
return
|
|
215
|
+
// this.logger.log('Get all stored assets: ', allAssets);
|
|
216
|
+
|
|
217
|
+
return this.stores.asset.getAll();
|
|
202
218
|
}
|
|
203
219
|
async removeFromAssetStore(items) {
|
|
204
|
-
this.logger.log('Bulk removing AssetStore');
|
|
220
|
+
// this.logger.log('Bulk removing AssetStore');
|
|
221
|
+
|
|
205
222
|
return this.stores.asset.removeAssets(items);
|
|
206
223
|
}
|
|
207
224
|
|
|
208
225
|
// Staking
|
|
209
226
|
async updateChainStakingMetadata(item) {
|
|
210
|
-
this.logger.log('Update ChainStakingMetadata: ', item.chain);
|
|
227
|
+
// this.logger.log('Update ChainStakingMetadata: ', item.chain);
|
|
228
|
+
|
|
211
229
|
return this.stores.chainStakingMetadata.upsert(item);
|
|
212
230
|
}
|
|
213
231
|
async getChainStakingMetadata() {
|
|
@@ -218,7 +236,8 @@ class DatabaseService {
|
|
|
218
236
|
return this.stores.chainStakingMetadata.getByChainAndType(chain, type);
|
|
219
237
|
}
|
|
220
238
|
async updateNominatorMetadata(item) {
|
|
221
|
-
this.logger.log('Update NominatorMetadata: ', item.address, item.chain);
|
|
239
|
+
// this.logger.log('Update NominatorMetadata: ', item.address, item.chain);
|
|
240
|
+
|
|
222
241
|
return this.stores.nominatorMetadata.upsert(item);
|
|
223
242
|
}
|
|
224
243
|
async getNominatorMetadata() {
|
|
@@ -13,7 +13,7 @@ const DEFAULT_DATABASE = 'SubWalletDB_v2';
|
|
|
13
13
|
class KoniDatabase extends _dexie.default {
|
|
14
14
|
constructor() {
|
|
15
15
|
let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_DATABASE;
|
|
16
|
-
let schemaVersion = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] :
|
|
16
|
+
let schemaVersion = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10;
|
|
17
17
|
super(name);
|
|
18
18
|
this.schemaVersion = schemaVersion;
|
|
19
19
|
this.conditionalVersion(1, {
|
|
@@ -16,14 +16,8 @@ class BaseStoreWithAddressAndChain extends _BaseStore.default {
|
|
|
16
16
|
[v.chain]: v
|
|
17
17
|
}), {});
|
|
18
18
|
}
|
|
19
|
-
removeAllByAddress(address
|
|
20
|
-
|
|
21
|
-
address
|
|
22
|
-
};
|
|
23
|
-
if (chain) {
|
|
24
|
-
conditions.chain = chain;
|
|
25
|
-
}
|
|
26
|
-
return this.table.where(conditions).delete();
|
|
19
|
+
removeAllByAddress(address) {
|
|
20
|
+
return this.table.where('address').equalsIgnoreCase(address).delete();
|
|
27
21
|
}
|
|
28
22
|
async getDataByAddressAsObject(address) {
|
|
29
23
|
const data = await this.table.where('address').equals(address).toArray();
|
|
@@ -24,27 +24,17 @@ class NftStore extends _BaseStoreWithAddressAndChain.default {
|
|
|
24
24
|
let chainList = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
25
25
|
return (0, _dexie.liveQuery)(() => this.getNft(addresses, chainList));
|
|
26
26
|
}
|
|
27
|
-
|
|
28
|
-
let nftIds = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
|
|
29
|
-
const conditions = {
|
|
30
|
-
chainHash,
|
|
31
|
-
address
|
|
32
|
-
};
|
|
33
|
-
if (!collection && nftIds && nftIds.length) {
|
|
34
|
-
return this.logger.warn('Missing collection id');
|
|
35
|
-
}
|
|
36
|
-
if (collection) {
|
|
37
|
-
conditions.collectionId = collection;
|
|
38
|
-
}
|
|
39
|
-
return this.table.where(conditions).and(item => !nftIds.some(nft => nft === item.id)).delete();
|
|
40
|
-
}
|
|
41
|
-
deleteNftsFromRemovedCollection(chain, address, collectionIds) {
|
|
27
|
+
cleanUpNfts(chain, address, collectionId, nftIds) {
|
|
42
28
|
return this.table.where({
|
|
43
29
|
address,
|
|
44
|
-
chain
|
|
45
|
-
|
|
30
|
+
chain,
|
|
31
|
+
collectionId
|
|
32
|
+
}).and(nft => !nftIds.includes(nft.id)).delete();
|
|
33
|
+
}
|
|
34
|
+
deleteNftByAddress(addresses) {
|
|
35
|
+
return this.table.where('address').anyOfIgnoreCase(addresses).delete();
|
|
46
36
|
}
|
|
47
|
-
|
|
37
|
+
deleteNftItem(chain, addresses, nftItem) {
|
|
48
38
|
return this.table.where('address').anyOfIgnoreCase(addresses).filter(storedItem => storedItem.chain === chain && storedItem.collectionId === nftItem.collectionId && storedItem.id === nftItem.id).delete();
|
|
49
39
|
}
|
|
50
40
|
deleteNftsByCollection(chain, collectionId) {
|
|
@@ -36,13 +36,16 @@ class TransactionStore extends _BaseStoreWithAddressAndChain.default {
|
|
|
36
36
|
}
|
|
37
37
|
async bulkUpsert(records) {
|
|
38
38
|
await this.table.bulkPut(records);
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}))
|
|
39
|
+
|
|
40
|
+
// await Promise.all(records.map((record) => {
|
|
41
|
+
// return this.table.where({
|
|
42
|
+
// chain: record.chain,
|
|
43
|
+
// address: record.address,
|
|
44
|
+
// extrinsicHash: record.extrinsicHash
|
|
45
|
+
// }).filter((item) => (item.origin === 'app' && record.origin !== 'app'))
|
|
46
|
+
// .delete();
|
|
47
|
+
// }));
|
|
48
|
+
|
|
46
49
|
return true;
|
|
47
50
|
}
|
|
48
51
|
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.SubscanService = void 0;
|
|
8
|
+
var _SWError = require("@subwallet/extension-base/background/errors/SWError");
|
|
9
|
+
var _subscanChainMap = _interopRequireDefault(require("@subwallet/extension-base/services/subscan-service/subscan-chain-map"));
|
|
10
|
+
var _crossFetch = _interopRequireDefault(require("cross-fetch"));
|
|
11
|
+
// Copyright 2019-2022 @subwallet/extension-base
|
|
12
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
13
|
+
|
|
14
|
+
class SubscanService {
|
|
15
|
+
limitRate = 2; // limit per interval check
|
|
16
|
+
intervalCheck = 1000; // interval check in ms
|
|
17
|
+
maxRetry = 9; // interval check in ms
|
|
18
|
+
requestMap = {};
|
|
19
|
+
nextId = 0;
|
|
20
|
+
isRunning = false;
|
|
21
|
+
getId() {
|
|
22
|
+
return this.nextId++;
|
|
23
|
+
}
|
|
24
|
+
constructor(options) {
|
|
25
|
+
this.limitRate = (options === null || options === void 0 ? void 0 : options.limitRate) || this.limitRate;
|
|
26
|
+
this.intervalCheck = (options === null || options === void 0 ? void 0 : options.intervalCheck) || this.intervalCheck;
|
|
27
|
+
this.maxRetry = (options === null || options === void 0 ? void 0 : options.maxRetry) || this.maxRetry;
|
|
28
|
+
}
|
|
29
|
+
getApiUrl(chain, path) {
|
|
30
|
+
const subscanChain = _subscanChainMap.default[chain];
|
|
31
|
+
if (!subscanChain) {
|
|
32
|
+
throw new _SWError.SWError('NOT_SUPPORTED', 'Chain is not supported');
|
|
33
|
+
}
|
|
34
|
+
return `https://${chain}.api.subscan.io/${path}`;
|
|
35
|
+
}
|
|
36
|
+
postRequest(url, body) {
|
|
37
|
+
return (0, _crossFetch.default)(url, {
|
|
38
|
+
method: 'POST',
|
|
39
|
+
headers: {
|
|
40
|
+
'Content-Type': 'application/json'
|
|
41
|
+
},
|
|
42
|
+
body: JSON.stringify(body)
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
addRequest(run) {
|
|
46
|
+
const newId = this.getId();
|
|
47
|
+
return new Promise((resolve, reject) => {
|
|
48
|
+
this.requestMap[newId] = {
|
|
49
|
+
id: newId,
|
|
50
|
+
status: 'pending',
|
|
51
|
+
retry: -1,
|
|
52
|
+
run,
|
|
53
|
+
resolve,
|
|
54
|
+
reject
|
|
55
|
+
};
|
|
56
|
+
if (!this.isRunning) {
|
|
57
|
+
this.process();
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
process() {
|
|
62
|
+
this.isRunning = true;
|
|
63
|
+
const maxRetry = this.maxRetry;
|
|
64
|
+
const interval = setInterval(() => {
|
|
65
|
+
const remainingRequests = Object.values(this.requestMap);
|
|
66
|
+
if (remainingRequests.length === 0) {
|
|
67
|
+
this.isRunning = false;
|
|
68
|
+
clearInterval(interval);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Get first this.limit requests base on id
|
|
73
|
+
const requests = remainingRequests.filter(request => request.status !== 'running').sort((a, b) => a.id - b.id).slice(0, this.limitRate);
|
|
74
|
+
|
|
75
|
+
// Start requests
|
|
76
|
+
requests.forEach(request => {
|
|
77
|
+
request.status = 'running';
|
|
78
|
+
request.run().then(rs => {
|
|
79
|
+
request.resolve(rs);
|
|
80
|
+
}).catch(e => {
|
|
81
|
+
if (request.retry < maxRetry) {
|
|
82
|
+
request.status = 'pending';
|
|
83
|
+
request.retry++;
|
|
84
|
+
} else {
|
|
85
|
+
// Reject request
|
|
86
|
+
request.reject(new _SWError.SWError('MAX_RETRY', String(e)));
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
}, this.intervalCheck);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Implement Subscan API
|
|
94
|
+
getMultiChainBalance(address) {
|
|
95
|
+
return this.addRequest(async () => {
|
|
96
|
+
const rs = await this.postRequest(this.getApiUrl('polkadot', 'api/scan/multiChain/account'), {
|
|
97
|
+
address
|
|
98
|
+
});
|
|
99
|
+
if (rs.status !== 200) {
|
|
100
|
+
throw new _SWError.SWError('SubscanService.getMultiChainBalance', await rs.text());
|
|
101
|
+
}
|
|
102
|
+
const jsonData = await rs.json();
|
|
103
|
+
return jsonData.data;
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
exports.SubscanService = SubscanService;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.SUBSCAN_CHAIN_MAP_REVERSE = void 0;
|
|
7
|
+
// Copyright 2019-2022 @subwallet/extension-base
|
|
8
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
9
|
+
|
|
10
|
+
const SUBSCAN_CHAIN_MAP = {
|
|
11
|
+
polkadot: 'polkadot',
|
|
12
|
+
kusama: 'kusama',
|
|
13
|
+
moonbeam: 'moonbeam',
|
|
14
|
+
acala: 'acala',
|
|
15
|
+
astar: 'astar',
|
|
16
|
+
shiden: 'shiden',
|
|
17
|
+
shibuya: 'shibuya',
|
|
18
|
+
westend: 'westend',
|
|
19
|
+
moonbase: 'moonbase',
|
|
20
|
+
moonriver: 'moonriver',
|
|
21
|
+
turing: 'turing',
|
|
22
|
+
bifrost_testnet: 'bifrost-testnet',
|
|
23
|
+
calamari: 'calamari',
|
|
24
|
+
statemint: 'statemint',
|
|
25
|
+
pioneer: 'pioneer',
|
|
26
|
+
parallel: 'parallel',
|
|
27
|
+
clover: 'clover',
|
|
28
|
+
hydradx_main: 'hydradx',
|
|
29
|
+
edgeware: 'edgeware',
|
|
30
|
+
centrifuge: 'centrifuge',
|
|
31
|
+
interlay: 'interlay',
|
|
32
|
+
nodle: 'nodle',
|
|
33
|
+
darwinia: 'darwinia',
|
|
34
|
+
polkadex: 'polkadex',
|
|
35
|
+
aleph: 'alephzero',
|
|
36
|
+
dolphin: 'dolphin',
|
|
37
|
+
efinity: 'efinity',
|
|
38
|
+
composableFinance: 'composable',
|
|
39
|
+
phala: 'phala',
|
|
40
|
+
crust: 'crust',
|
|
41
|
+
statemine: 'statemine',
|
|
42
|
+
karura: 'karura',
|
|
43
|
+
khala: 'khala',
|
|
44
|
+
kilt: 'spiritnet',
|
|
45
|
+
basilisk: 'basilisk',
|
|
46
|
+
altair: 'altair',
|
|
47
|
+
heiko: 'parallel-heiko',
|
|
48
|
+
kintsugi: 'kintsugi',
|
|
49
|
+
picasso: 'picasso',
|
|
50
|
+
quartz: 'quartz',
|
|
51
|
+
unique_network: 'unique',
|
|
52
|
+
genshiro: 'genshiro',
|
|
53
|
+
zeitgeist: 'zeitgeist',
|
|
54
|
+
sakura: 'sakura',
|
|
55
|
+
shadow: 'shadow',
|
|
56
|
+
robonomics: 'robonomics',
|
|
57
|
+
integritee: 'integritee',
|
|
58
|
+
acala_testnet: 'acala-testnet',
|
|
59
|
+
mangatax: 'mangatax',
|
|
60
|
+
encointer: 'encointer',
|
|
61
|
+
subspace_gemini_2a: 'subspace',
|
|
62
|
+
origintrail: 'origintrail',
|
|
63
|
+
bajun: 'bajun',
|
|
64
|
+
snow: 'snow',
|
|
65
|
+
kilt_peregrine: 'kilt-testnet',
|
|
66
|
+
polymesh: 'polymesh'
|
|
67
|
+
};
|
|
68
|
+
const SUBSCAN_CHAIN_MAP_REVERSE = Object.fromEntries(Object.entries(SUBSCAN_CHAIN_MAP).map(_ref => {
|
|
69
|
+
let [k, v] = _ref;
|
|
70
|
+
return [v, k];
|
|
71
|
+
}));
|
|
72
|
+
exports.SUBSCAN_CHAIN_MAP_REVERSE = SUBSCAN_CHAIN_MAP_REVERSE;
|
|
73
|
+
var _default = SUBSCAN_CHAIN_MAP;
|
|
74
|
+
exports.default = _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|