@subwallet/extension-base 1.1.2-0 → 1.1.2-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/background/KoniTypes.d.ts +14 -4
- package/cjs/constants/i18n.js +10 -2
- package/cjs/koni/api/dotsama/transfer.js +6 -0
- package/cjs/koni/api/nft/acala_nft/index.js +0 -2
- package/cjs/koni/api/nft/bit.country/index.js +49 -18
- package/cjs/koni/api/nft/config.js +5 -3
- package/cjs/koni/api/nft/evm_nft/index.js +0 -5
- package/cjs/koni/api/nft/index.js +2 -3
- package/cjs/koni/api/nft/karura_nft/index.js +0 -2
- package/cjs/koni/api/nft/rmrk_nft/index.js +0 -4
- package/cjs/koni/api/nft/statemine_nft/index.js +0 -2
- package/cjs/koni/api/nft/unique_nft/index.js +0 -5
- package/cjs/koni/api/nft/wasm_nft/index.js +0 -5
- package/cjs/koni/api/staking/bonding/amplitude.js +6 -6
- package/cjs/koni/api/staking/bonding/astar.js +6 -6
- package/cjs/koni/api/staking/bonding/paraChain.js +5 -5
- package/cjs/koni/api/staking/bonding/relayChain.js +24 -14
- package/cjs/koni/api/staking/bonding/utils.js +1 -7
- package/cjs/koni/api/xcm/xTokens.js +1 -1
- package/cjs/koni/background/cron.js +2 -37
- package/cjs/koni/background/handlers/Extension.js +133 -123
- package/cjs/koni/background/handlers/State.js +6 -43
- package/cjs/koni/background/subscription.js +6 -88
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/chain-service/constants.js +6 -4
- package/cjs/services/setting-service/constants.js +16 -6
- package/cjs/services/storage-service/DatabaseService.js +3 -0
- package/cjs/services/storage-service/db-stores/Nft.js +3 -0
- package/cjs/services/storage-service/db-stores/NominatorMetadata.js +3 -2
- package/cjs/utils/index.js +12 -0
- package/cjs/utils/translate.js +11 -0
- package/constants/i18n.d.ts +2 -1
- package/constants/i18n.js +8 -1
- package/koni/api/dotsama/transfer.js +6 -0
- package/koni/api/nft/acala_nft/index.js +0 -2
- package/koni/api/nft/bit.country/index.d.ts +1 -0
- package/koni/api/nft/bit.country/index.js +50 -19
- package/koni/api/nft/config.d.ts +2 -1
- package/koni/api/nft/config.js +2 -1
- package/koni/api/nft/evm_nft/index.js +0 -4
- package/koni/api/nft/index.d.ts +1 -1
- package/koni/api/nft/index.js +2 -3
- package/koni/api/nft/karura_nft/index.js +0 -2
- package/koni/api/nft/nft.d.ts +0 -1
- package/koni/api/nft/rmrk_nft/index.js +0 -4
- package/koni/api/nft/statemine_nft/index.js +0 -2
- package/koni/api/nft/unique_nft/index.js +0 -5
- package/koni/api/nft/wasm_nft/index.js +0 -4
- package/koni/api/staking/bonding/amplitude.js +6 -6
- package/koni/api/staking/bonding/astar.js +6 -6
- package/koni/api/staking/bonding/paraChain.js +5 -5
- package/koni/api/staking/bonding/relayChain.js +24 -14
- package/koni/api/staking/bonding/utils.js +1 -7
- package/koni/api/xcm/xTokens.js +1 -1
- package/koni/background/cron.d.ts +0 -5
- package/koni/background/cron.js +4 -39
- package/koni/background/handlers/Extension.d.ts +2 -0
- package/koni/background/handlers/Extension.js +25 -17
- package/koni/background/handlers/State.d.ts +2 -6
- package/koni/background/handlers/State.js +6 -43
- package/koni/background/subscription.d.ts +1 -4
- package/koni/background/subscription.js +9 -88
- package/package.json +11 -6
- package/packageInfo.js +1 -1
- package/services/chain-service/constants.d.ts +1 -0
- package/services/chain-service/constants.js +6 -4
- package/services/setting-service/constants.d.ts +6 -1
- package/services/setting-service/constants.js +10 -5
- package/services/storage-service/DatabaseService.d.ts +1 -0
- package/services/storage-service/DatabaseService.js +3 -0
- package/services/storage-service/db-stores/Nft.d.ts +1 -0
- package/services/storage-service/db-stores/Nft.js +3 -0
- package/services/storage-service/db-stores/NominatorMetadata.js +3 -2
- package/utils/index.d.ts +1 -0
- package/utils/index.js +2 -1
- package/utils/translate.d.ts +1 -0
- package/utils/translate.js +4 -0
|
@@ -620,51 +620,11 @@ class KoniState {
|
|
|
620
620
|
setSettings(settings, callback) {
|
|
621
621
|
this.settingService.setSettings(settings, callback);
|
|
622
622
|
}
|
|
623
|
-
|
|
623
|
+
updateSetting(key, value) {
|
|
624
624
|
this.settingService.getSettings(settings => {
|
|
625
625
|
const newSettings = {
|
|
626
626
|
...settings,
|
|
627
|
-
|
|
628
|
-
};
|
|
629
|
-
this.settingService.setSettings(newSettings, () => {
|
|
630
|
-
callback && callback(newSettings);
|
|
631
|
-
});
|
|
632
|
-
});
|
|
633
|
-
}
|
|
634
|
-
setBrowserConfirmationType(browserConfirmationType, callback) {
|
|
635
|
-
this.settingService.getSettings(settings => {
|
|
636
|
-
const newSettings = {
|
|
637
|
-
...settings,
|
|
638
|
-
browserConfirmationType
|
|
639
|
-
};
|
|
640
|
-
this.settingService.setSettings(newSettings, () => {
|
|
641
|
-
callback && callback(newSettings);
|
|
642
|
-
});
|
|
643
|
-
});
|
|
644
|
-
}
|
|
645
|
-
setCamera(value) {
|
|
646
|
-
this.settingService.getSettings(settings => {
|
|
647
|
-
const newSettings = {
|
|
648
|
-
...settings,
|
|
649
|
-
camera: value
|
|
650
|
-
};
|
|
651
|
-
this.settingService.setSettings(newSettings);
|
|
652
|
-
});
|
|
653
|
-
}
|
|
654
|
-
setAutoLockTime(value) {
|
|
655
|
-
this.settingService.getSettings(settings => {
|
|
656
|
-
const newSettings = {
|
|
657
|
-
...settings,
|
|
658
|
-
timeAutoLock: value
|
|
659
|
-
};
|
|
660
|
-
this.settingService.setSettings(newSettings);
|
|
661
|
-
});
|
|
662
|
-
}
|
|
663
|
-
setEnableChainPatrol(value) {
|
|
664
|
-
this.settingService.getSettings(settings => {
|
|
665
|
-
const newSettings = {
|
|
666
|
-
...settings,
|
|
667
|
-
enableChainPatrol: value
|
|
627
|
+
[key]: value
|
|
668
628
|
};
|
|
669
629
|
this.settingService.setSettings(newSettings);
|
|
670
630
|
});
|
|
@@ -1561,10 +1521,13 @@ class KoniState {
|
|
|
1561
1521
|
});
|
|
1562
1522
|
}
|
|
1563
1523
|
async reloadNft() {
|
|
1524
|
+
const currentAddress = this.keyringService.currentAccount.address;
|
|
1525
|
+
await this.dbService.removeNftsByAddress(currentAddress);
|
|
1564
1526
|
return await this.cron.reloadNft();
|
|
1565
1527
|
}
|
|
1566
1528
|
async reloadStaking() {
|
|
1567
|
-
|
|
1529
|
+
await this.subscription.reloadStaking();
|
|
1530
|
+
return true;
|
|
1568
1531
|
}
|
|
1569
1532
|
async approvePassPhishingPage(_url) {
|
|
1570
1533
|
return new Promise(resolve => {
|
|
@@ -1,24 +1,19 @@
|
|
|
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.KoniSubscription = void 0;
|
|
8
|
-
var _constants = require("@subwallet/extension-base/constants");
|
|
9
7
|
var _balance = require("@subwallet/extension-base/koni/api/dotsama/balance");
|
|
10
8
|
var _crowdloan = require("@subwallet/extension-base/koni/api/dotsama/crowdloan");
|
|
11
9
|
var _staking = require("@subwallet/extension-base/koni/api/staking");
|
|
12
10
|
var _bonding = require("@subwallet/extension-base/koni/api/staking/bonding");
|
|
13
|
-
var _relayChain = require("@subwallet/extension-base/koni/api/staking/bonding/relayChain");
|
|
14
11
|
var _paraChain = require("@subwallet/extension-base/koni/api/staking/paraChain");
|
|
15
12
|
var _handlers = require("@subwallet/extension-base/koni/background/handlers");
|
|
16
|
-
var _constants2 = require("@subwallet/extension-base/services/chain-service/constants");
|
|
17
13
|
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
18
14
|
var _types = require("@subwallet/extension-base/services/event-service/types");
|
|
19
|
-
var
|
|
15
|
+
var _utils2 = require("@subwallet/extension-base/utils");
|
|
20
16
|
var _util = require("@polkadot/util");
|
|
21
|
-
var _utilCrypto = require("@polkadot/util-crypto");
|
|
22
17
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
23
18
|
// SPDX-License-Identifier: Apache-2.0
|
|
24
19
|
|
|
@@ -198,8 +193,6 @@ class KoniSubscription {
|
|
|
198
193
|
return _this.state.updateNftData(...arguments);
|
|
199
194
|
}, function () {
|
|
200
195
|
return _this.state.setNftCollection(...arguments);
|
|
201
|
-
}, function () {
|
|
202
|
-
return _this.state.cleanUpNfts(...arguments);
|
|
203
196
|
}).catch(this.logger.log);
|
|
204
197
|
}
|
|
205
198
|
async subscribeStakingReward(address) {
|
|
@@ -250,86 +243,11 @@ class KoniSubscription {
|
|
|
250
243
|
};
|
|
251
244
|
await Promise.all([(0, _staking.getPoolingStakingRewardData)(pooledAddresses, targetChainMap, this.state.getSubstrateApiMap(), updateState), (0, _paraChain.getAmplitudeUnclaimedStakingReward)(this.state.getSubstrateApiMap(), addresses, chainInfoMap, activeNetworks, updateState)]);
|
|
252
245
|
}
|
|
253
|
-
async
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
}
|
|
259
|
-
} catch (e) {
|
|
260
|
-
this.logger.error(e);
|
|
261
|
-
}
|
|
262
|
-
return {};
|
|
263
|
-
}
|
|
264
|
-
async fetchChainStakingMetadata(chainInfoMap, chainStateMap, substrateApiMap) {
|
|
265
|
-
const filteredChainInfoMap = {};
|
|
266
|
-
Object.values(chainInfoMap).forEach(chainInfo => {
|
|
267
|
-
const chainState = chainStateMap[chainInfo.slug];
|
|
268
|
-
if (chainState !== null && chainState !== void 0 && chainState.active && (0, _utils._isChainSupportSubstrateStaking)(chainInfo)) {
|
|
269
|
-
filteredChainInfoMap[chainInfo.slug] = chainInfo;
|
|
270
|
-
}
|
|
271
|
-
});
|
|
272
|
-
if (Object.values(filteredChainInfoMap).length === 0) {
|
|
273
|
-
return;
|
|
274
|
-
}
|
|
275
|
-
const timeout = new Promise(resolve => {
|
|
276
|
-
const id = setTimeout(() => {
|
|
277
|
-
clearTimeout(id);
|
|
278
|
-
resolve(null);
|
|
279
|
-
}, 3000);
|
|
280
|
-
});
|
|
281
|
-
|
|
282
|
-
// Fetch data from helper API
|
|
283
|
-
const _dataFromApi = await Promise.race([this.fetchingStakingFromApi(), timeout]);
|
|
284
|
-
const dataFromApi = _dataFromApi;
|
|
285
|
-
await Promise.all(Object.values(filteredChainInfoMap).map(async chainInfo => {
|
|
286
|
-
// Use fetch API data if available
|
|
287
|
-
if (dataFromApi && dataFromApi[chainInfo.slug]) {
|
|
288
|
-
this.state.updateChainStakingMetadata(dataFromApi[chainInfo.slug], {
|
|
289
|
-
expectedReturn: dataFromApi[chainInfo.slug].expectedReturn,
|
|
290
|
-
inflation: dataFromApi[chainInfo.slug].inflation,
|
|
291
|
-
nominatorCount: dataFromApi[chainInfo.slug].nominatorCount
|
|
292
|
-
});
|
|
293
|
-
} else {
|
|
294
|
-
const chainStakingMetadata = await (0, _bonding.getChainStakingMetadata)(chainInfo, substrateApiMap[chainInfo.slug]);
|
|
295
|
-
this.state.updateChainStakingMetadata(chainStakingMetadata, {
|
|
296
|
-
expectedReturn: chainStakingMetadata.expectedReturn,
|
|
297
|
-
inflation: chainStakingMetadata.inflation,
|
|
298
|
-
nominatorCount: chainStakingMetadata.nominatorCount
|
|
299
|
-
});
|
|
300
|
-
}
|
|
301
|
-
}));
|
|
302
|
-
}
|
|
303
|
-
async fetchNominatorMetadata(currentAddress, chainInfoMap, chainStateMap, substrateApiMap) {
|
|
304
|
-
const filteredChainInfoMap = {};
|
|
305
|
-
Object.values(chainInfoMap).forEach(chainInfo => {
|
|
306
|
-
const chainState = chainStateMap[chainInfo.slug];
|
|
307
|
-
if (chainState !== null && chainState !== void 0 && chainState.active && (0, _utils._isChainSupportSubstrateStaking)(chainInfo)) {
|
|
308
|
-
filteredChainInfoMap[chainInfo.slug] = chainInfo;
|
|
309
|
-
}
|
|
310
|
-
});
|
|
311
|
-
let addresses = [currentAddress];
|
|
312
|
-
if (currentAddress === _constants.ALL_ACCOUNT_KEY) {
|
|
313
|
-
addresses = await this.state.getStakingOwnersByChains(Object.keys(filteredChainInfoMap));
|
|
314
|
-
}
|
|
315
|
-
await Promise.all(addresses.map(async address => {
|
|
316
|
-
const isEvmAddress = (0, _utilCrypto.isEthereumAddress)(address);
|
|
317
|
-
await Promise.all(Object.values(filteredChainInfoMap).map(async chainInfo => {
|
|
318
|
-
if (isEvmAddress && !(0, _utils._isChainEvmCompatible)(chainInfo)) {
|
|
319
|
-
return;
|
|
320
|
-
}
|
|
321
|
-
if ((0, _utils._isSubstrateRelayChain)(chainInfo) && _constants2._STAKING_CHAIN_GROUP.nominationPool.includes(chainInfo.slug)) {
|
|
322
|
-
const poolMemberMetadata = await (0, _relayChain.getRelayChainPoolMemberMetadata)(chainInfo, address, substrateApiMap[chainInfo.slug]);
|
|
323
|
-
if (poolMemberMetadata) {
|
|
324
|
-
this.state.updateStakingNominatorMetadata(poolMemberMetadata);
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
const nominatorMetadata = await (0, _bonding.getNominatorMetadata)(chainInfo, address, substrateApiMap[chainInfo.slug]);
|
|
328
|
-
if (nominatorMetadata) {
|
|
329
|
-
this.state.updateStakingNominatorMetadata(nominatorMetadata);
|
|
330
|
-
}
|
|
331
|
-
}));
|
|
332
|
-
}));
|
|
246
|
+
async reloadStaking() {
|
|
247
|
+
var _this$state$keyringSe2;
|
|
248
|
+
const currentAddress = (_this$state$keyringSe2 = this.state.keyringService.currentAccount) === null || _this$state$keyringSe2 === void 0 ? void 0 : _this$state$keyringSe2.address;
|
|
249
|
+
this.subscribeStakingOnChain(currentAddress, this.state.getSubstrateApiMap());
|
|
250
|
+
await (0, _utils2.waitTimeout)(1800);
|
|
333
251
|
}
|
|
334
252
|
}
|
|
335
253
|
exports.KoniSubscription = KoniSubscription;
|
package/cjs/packageInfo.js
CHANGED
|
@@ -37,7 +37,7 @@ const _BALANCE_CHAIN_GROUP = {
|
|
|
37
37
|
kintsugi: ['kintsugi', 'interlay', 'kintsugi_test', 'mangatax_para'],
|
|
38
38
|
genshiro: ['genshiro_testnet', 'genshiro'],
|
|
39
39
|
equilibrium_parachain: ['equilibrium_parachain'],
|
|
40
|
-
bifrost: ['bifrost', 'acala', 'karura', 'acala_testnet', 'pioneer', 'bitcountry', 'bifrost_dot', 'hydradx_main'],
|
|
40
|
+
bifrost: ['bifrost', 'acala', 'karura', 'acala_testnet', 'pioneer', 'bitcountry', 'bifrost_dot', 'hydradx_main', 'pendulum'],
|
|
41
41
|
statemine: ['statemine', 'astar', 'shiden', 'statemint', 'moonbeam', 'moonbase', 'moonriver', 'crabParachain', 'darwinia2', 'parallel', 'calamari'],
|
|
42
42
|
kusama: ['kusama', 'kintsugi', 'kintsugi_test', 'interlay', 'acala', 'statemint', 'karura', 'bifrost'] // perhaps there are some runtime updates
|
|
43
43
|
};
|
|
@@ -63,7 +63,7 @@ const _STAKING_CHAIN_GROUP = {
|
|
|
63
63
|
relay: ['polkadot', 'kusama', 'aleph', 'polkadex', 'ternoa', 'ternoa_alphanet', 'alephTest', 'polkadexTest', 'westend'],
|
|
64
64
|
para: ['moonbeam', 'moonriver', 'moonbase', 'turing', 'turingStaging', 'bifrost', 'bifrost_testnet', 'calamari_test', 'calamari'],
|
|
65
65
|
astar: ['astar', 'shiden', 'shibuya'],
|
|
66
|
-
amplitude: ['amplitude', 'amplitude_test', 'kilt', 'kilt_peregrine'],
|
|
66
|
+
amplitude: ['amplitude', 'amplitude_test', 'kilt', 'kilt_peregrine', 'pendulum'],
|
|
67
67
|
// amplitude and kilt only share some common logic
|
|
68
68
|
kilt: ['kilt', 'kilt_peregrine'],
|
|
69
69
|
nominationPool: ['polkadot', 'kusama', 'westend', 'alephTest', 'aleph'],
|
|
@@ -97,6 +97,7 @@ const _STAKING_ERA_LENGTH_MAP = {
|
|
|
97
97
|
calamari_test: 6,
|
|
98
98
|
amplitude: 2,
|
|
99
99
|
amplitude_test: 2,
|
|
100
|
+
pendulum: 2,
|
|
100
101
|
kilt: 2,
|
|
101
102
|
kilt_peregrine: 2
|
|
102
103
|
};
|
|
@@ -201,7 +202,8 @@ const _TRANSFER_CHAIN_GROUP = {
|
|
|
201
202
|
statemine: ['statemint', 'statemine', 'darwinia2', 'astar', 'shiden', 'shibuya', 'parallel'],
|
|
202
203
|
riochain: ['riochain'],
|
|
203
204
|
sora_substrate: ['sora_substrate'],
|
|
204
|
-
avail: ['kate']
|
|
205
|
+
avail: ['kate'],
|
|
206
|
+
pendulum: ['pendulum']
|
|
205
207
|
};
|
|
206
208
|
exports._TRANSFER_CHAIN_GROUP = _TRANSFER_CHAIN_GROUP;
|
|
207
209
|
const _BALANCE_PARSING_CHAIN_GROUP = {
|
|
@@ -234,7 +236,7 @@ const _DEFAULT_ACTIVE_CHAINS = [..._chainList._DEFAULT_CHAINS];
|
|
|
234
236
|
|
|
235
237
|
// TODO: review
|
|
236
238
|
exports._DEFAULT_ACTIVE_CHAINS = _DEFAULT_ACTIVE_CHAINS;
|
|
237
|
-
const TARGET_BRANCH = process.env.NODE_ENV !== 'production' ? 'koni
|
|
239
|
+
const TARGET_BRANCH = process.env.NODE_ENV !== 'production' ? 'koni-dev' : 'master';
|
|
238
240
|
const _CHAIN_INFO_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainInfo.json`;
|
|
239
241
|
exports._CHAIN_INFO_SRC = _CHAIN_INFO_SRC;
|
|
240
242
|
const _CHAIN_ASSET_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainAsset.json`;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.DEFAULT_THEME = exports.DEFAULT_SETTING = exports.DEFAULT_NOTIFICATION_TYPE = exports.DEFAULT_CHAIN_PATROL_ENABLE = exports.DEFAULT_AUTO_LOCK_TIME = void 0;
|
|
6
|
+
exports.DEFAULT_THEME = exports.DEFAULT_SHOW_ZERO_BALANCE = exports.DEFAULT_SHOW_BALANCE = exports.DEFAULT_SETTING = exports.DEFAULT_NOTIFICATION_TYPE = exports.DEFAULT_LANGUAGE = exports.DEFAULT_CHAIN_PATROL_ENABLE = exports.DEFAULT_CAMERA_ENABLE = exports.DEFAULT_AUTO_LOCK_TIME = exports.DEFAULT_ALL_LOGO = void 0;
|
|
7
7
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
8
8
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
9
9
|
// SPDX-License-Identifier: Apache-2.0
|
|
@@ -16,14 +16,24 @@ const DEFAULT_AUTO_LOCK_TIME = 15;
|
|
|
16
16
|
exports.DEFAULT_AUTO_LOCK_TIME = DEFAULT_AUTO_LOCK_TIME;
|
|
17
17
|
const DEFAULT_CHAIN_PATROL_ENABLE = false;
|
|
18
18
|
exports.DEFAULT_CHAIN_PATROL_ENABLE = DEFAULT_CHAIN_PATROL_ENABLE;
|
|
19
|
+
const DEFAULT_LANGUAGE = 'en';
|
|
20
|
+
exports.DEFAULT_LANGUAGE = DEFAULT_LANGUAGE;
|
|
21
|
+
const DEFAULT_SHOW_ZERO_BALANCE = true;
|
|
22
|
+
exports.DEFAULT_SHOW_ZERO_BALANCE = DEFAULT_SHOW_ZERO_BALANCE;
|
|
23
|
+
const DEFAULT_SHOW_BALANCE = false;
|
|
24
|
+
exports.DEFAULT_SHOW_BALANCE = DEFAULT_SHOW_BALANCE;
|
|
25
|
+
const DEFAULT_ALL_LOGO = '';
|
|
26
|
+
exports.DEFAULT_ALL_LOGO = DEFAULT_ALL_LOGO;
|
|
27
|
+
const DEFAULT_CAMERA_ENABLE = false;
|
|
28
|
+
exports.DEFAULT_CAMERA_ENABLE = DEFAULT_CAMERA_ENABLE;
|
|
19
29
|
const DEFAULT_SETTING = {
|
|
20
|
-
|
|
30
|
+
language: DEFAULT_LANGUAGE,
|
|
21
31
|
browserConfirmationType: DEFAULT_NOTIFICATION_TYPE,
|
|
22
|
-
|
|
23
|
-
isShowBalance:
|
|
24
|
-
accountAllLogo:
|
|
32
|
+
isShowZeroBalance: DEFAULT_SHOW_ZERO_BALANCE,
|
|
33
|
+
isShowBalance: DEFAULT_SHOW_BALANCE,
|
|
34
|
+
accountAllLogo: DEFAULT_ALL_LOGO,
|
|
25
35
|
theme: DEFAULT_THEME,
|
|
26
|
-
camera:
|
|
36
|
+
camera: DEFAULT_CAMERA_ENABLE,
|
|
27
37
|
timeAutoLock: DEFAULT_AUTO_LOCK_TIME,
|
|
28
38
|
enableChainPatrol: DEFAULT_CHAIN_PATROL_ENABLE
|
|
29
39
|
};
|
|
@@ -178,6 +178,9 @@ class DatabaseService {
|
|
|
178
178
|
removeNfts(chain, address, collectionId, nftIds) {
|
|
179
179
|
return this.stores.nft.removeNfts(chain, address, collectionId, nftIds);
|
|
180
180
|
}
|
|
181
|
+
removeNftsByAddress(address) {
|
|
182
|
+
return this.stores.nft.removeNftsByAddress([address]);
|
|
183
|
+
}
|
|
181
184
|
|
|
182
185
|
// Chain
|
|
183
186
|
async updateChainStore(item) {
|
|
@@ -55,6 +55,9 @@ class NftStore extends _BaseStoreWithAddressAndChain.default {
|
|
|
55
55
|
collectionId
|
|
56
56
|
}).filter(item => nftIds.includes(item.id || '')).delete();
|
|
57
57
|
}
|
|
58
|
+
removeNftsByAddress(addresses) {
|
|
59
|
+
return this.table.where('address').anyOfIgnoreCase(addresses).delete();
|
|
60
|
+
}
|
|
58
61
|
|
|
59
62
|
// reformatCollectionIds (items: INft[]) {
|
|
60
63
|
// return items.map((item) => {
|
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.default = void 0;
|
|
8
|
+
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
8
9
|
var _BaseStoreWithAddressAndChain = _interopRequireDefault(require("@subwallet/extension-base/services/storage-service/db-stores/BaseStoreWithAddressAndChain"));
|
|
9
10
|
var _dexie = require("dexie");
|
|
10
11
|
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
@@ -12,7 +13,7 @@ var _dexie = require("dexie");
|
|
|
12
13
|
|
|
13
14
|
class NominatorMetadataStore extends _BaseStoreWithAddressAndChain.default {
|
|
14
15
|
async getAll() {
|
|
15
|
-
return this.table.toArray();
|
|
16
|
+
return this.table.filter(item => item.status !== _KoniTypes.StakingStatus.NOT_STAKING).toArray();
|
|
16
17
|
}
|
|
17
18
|
subscribeByAddresses(addresses) {
|
|
18
19
|
return (0, _dexie.liveQuery)(() => this.getByAddress(addresses));
|
|
@@ -21,7 +22,7 @@ class NominatorMetadataStore extends _BaseStoreWithAddressAndChain.default {
|
|
|
21
22
|
return (0, _dexie.liveQuery)(() => this.getAll());
|
|
22
23
|
}
|
|
23
24
|
getByAddress(addresses) {
|
|
24
|
-
return this.table.where('address').anyOfIgnoreCase(addresses).toArray();
|
|
25
|
+
return this.table.where('address').anyOfIgnoreCase(addresses).and(item => item.status !== _KoniTypes.StakingStatus.NOT_STAKING).toArray();
|
|
25
26
|
}
|
|
26
27
|
async removeByAddress(address) {
|
|
27
28
|
return this.table.where('address').anyOfIgnoreCase(address).delete();
|
package/cjs/utils/index.js
CHANGED
|
@@ -109,6 +109,18 @@ Object.keys(_lazy).forEach(function (key) {
|
|
|
109
109
|
}
|
|
110
110
|
});
|
|
111
111
|
});
|
|
112
|
+
var _translate = require("./translate");
|
|
113
|
+
Object.keys(_translate).forEach(function (key) {
|
|
114
|
+
if (key === "default" || key === "__esModule") return;
|
|
115
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
116
|
+
if (key in exports && exports[key] === _translate[key]) return;
|
|
117
|
+
Object.defineProperty(exports, key, {
|
|
118
|
+
enumerable: true,
|
|
119
|
+
get: function () {
|
|
120
|
+
return _translate[key];
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
});
|
|
112
124
|
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
113
125
|
// SPDX-License-Identifier: Apache-2.0
|
|
114
126
|
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.detectTranslate = void 0;
|
|
7
|
+
// Copyright 2019-2022 @subwallet/extension-base
|
|
8
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
9
|
+
|
|
10
|
+
const detectTranslate = message => message;
|
|
11
|
+
exports.detectTranslate = detectTranslate;
|
package/constants/i18n.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
import { LanguageOptionType } from '@subwallet/extension-base/background/KoniTypes';
|
|
1
|
+
import { LanguageOptionType, LanguageType } from '@subwallet/extension-base/background/KoniTypes';
|
|
2
2
|
export declare const languageOptions: LanguageOptionType[];
|
|
3
|
+
export declare const ENABLE_LANGUAGES: LanguageType[];
|
package/constants/i18n.js
CHANGED
|
@@ -4,9 +4,15 @@
|
|
|
4
4
|
export const languageOptions = [{
|
|
5
5
|
text: 'English',
|
|
6
6
|
value: 'en'
|
|
7
|
+
}, {
|
|
8
|
+
text: 'Tiếng Việt',
|
|
9
|
+
value: 'vi'
|
|
7
10
|
}, {
|
|
8
11
|
text: '汉语',
|
|
9
12
|
value: 'zh'
|
|
13
|
+
}, {
|
|
14
|
+
text: '日本語',
|
|
15
|
+
value: 'ja'
|
|
10
16
|
}, {
|
|
11
17
|
text: 'Français',
|
|
12
18
|
value: 'fr'
|
|
@@ -22,4 +28,5 @@ export const languageOptions = [{
|
|
|
22
28
|
}, {
|
|
23
29
|
text: 'اردو',
|
|
24
30
|
value: 'ur'
|
|
25
|
-
}];
|
|
31
|
+
}];
|
|
32
|
+
export const ENABLE_LANGUAGES = ['en', 'vi', 'zh'];
|
|
@@ -140,6 +140,12 @@ export const createTransferExtrinsic = async ({
|
|
|
140
140
|
} else if (value) {
|
|
141
141
|
transfer = api.tx.tokens.transfer(to, _getTokenOnChainInfo(tokenInfo) || _getTokenOnChainAssetId(tokenInfo), new BN(value));
|
|
142
142
|
}
|
|
143
|
+
} else if (_TRANSFER_CHAIN_GROUP.pendulum.includes(networkKey) && isTxTokensSupported) {
|
|
144
|
+
if (transferAll) {
|
|
145
|
+
transfer = api.tx.tokens.transferAll(to, _getTokenOnChainInfo(tokenInfo), false);
|
|
146
|
+
} else if (value) {
|
|
147
|
+
transfer = api.tx.tokens.transfer(to, _getTokenOnChainInfo(tokenInfo), new BN(value));
|
|
148
|
+
}
|
|
143
149
|
} else if (_TRANSFER_CHAIN_GROUP.genshiro.includes(networkKey)
|
|
144
150
|
// && isTxEqBalancesSupported
|
|
145
151
|
) {
|
|
@@ -75,7 +75,6 @@ export class AcalaNftApi extends BaseNftApi {
|
|
|
75
75
|
const assetIds = await this.getNfts([address]);
|
|
76
76
|
try {
|
|
77
77
|
if (!assetIds || assetIds.length === 0) {
|
|
78
|
-
params.cleanUpNfts(this.chain, address, [], [], true);
|
|
79
78
|
return;
|
|
80
79
|
}
|
|
81
80
|
const collectionIds = [];
|
|
@@ -111,7 +110,6 @@ export class AcalaNftApi extends BaseNftApi {
|
|
|
111
110
|
params.updateItem(this.chain, parsedNft, address);
|
|
112
111
|
params.updateCollection(this.chain, parsedCollection);
|
|
113
112
|
}));
|
|
114
|
-
params.cleanUpNfts(this.chain, address, collectionIds, nftIds);
|
|
115
113
|
} catch (e) {
|
|
116
114
|
console.error(`${this.chain}`, e);
|
|
117
115
|
}
|
|
@@ -6,6 +6,7 @@ export declare class BitCountryNftApi extends BaseNftApi {
|
|
|
6
6
|
private getNfts;
|
|
7
7
|
private getTokenDetails;
|
|
8
8
|
private getCollectionDetails;
|
|
9
|
+
private parseMetadata;
|
|
9
10
|
fetchNfts(params: HandleNftParams): Promise<number>;
|
|
10
11
|
handleNft(address: string, params: HandleNftParams): Promise<void>;
|
|
11
12
|
handleNfts(params: HandleNftParams): Promise<void>;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
-
import {
|
|
4
|
+
import { BIT_COUNTRY_IPFS_SERVER, BIT_COUNTRY_LAND_ESTATE_METADATA_API } from '@subwallet/extension-base/koni/api/nft/config';
|
|
5
5
|
import { BaseNftApi } from '@subwallet/extension-base/koni/api/nft/nft';
|
|
6
6
|
import { isUrl } from '@subwallet/extension-base/utils';
|
|
7
7
|
import fetch from 'cross-fetch';
|
|
8
|
+
import { BN_ZERO, hexToBn } from '@polkadot/util';
|
|
8
9
|
export class BitCountryNftApi extends BaseNftApi {
|
|
9
10
|
constructor(api, addresses, chain) {
|
|
10
11
|
super(chain, api, addresses);
|
|
@@ -17,9 +18,9 @@ export class BitCountryNftApi extends BaseNftApi {
|
|
|
17
18
|
return input;
|
|
18
19
|
}
|
|
19
20
|
if (!input.includes('ipfs://')) {
|
|
20
|
-
return
|
|
21
|
+
return BIT_COUNTRY_IPFS_SERVER + input;
|
|
21
22
|
}
|
|
22
|
-
return
|
|
23
|
+
return BIT_COUNTRY_IPFS_SERVER + input.split('ipfs://')[1];
|
|
23
24
|
}
|
|
24
25
|
async getNfts(addresses) {
|
|
25
26
|
if (!this.substrateApi) {
|
|
@@ -48,7 +49,13 @@ export class BitCountryNftApi extends BaseNftApi {
|
|
|
48
49
|
if (!onChainMeta.metadata) {
|
|
49
50
|
return null;
|
|
50
51
|
}
|
|
51
|
-
|
|
52
|
+
|
|
53
|
+
// check if NFT is Land/Estate
|
|
54
|
+
if (onChainMeta.data.attributes['MetaverseId:']) {
|
|
55
|
+
return await fetch(`${BIT_COUNTRY_LAND_ESTATE_METADATA_API}/${assetId.classId}/${assetId.tokenId}/metadata.json`).then(resp => resp.json());
|
|
56
|
+
} else {
|
|
57
|
+
return await fetch(BIT_COUNTRY_IPFS_SERVER + onChainMeta.metadata).then(resp => resp.json());
|
|
58
|
+
}
|
|
52
59
|
}
|
|
53
60
|
async getCollectionDetails(collectionId) {
|
|
54
61
|
if (!this.substrateApi) {
|
|
@@ -58,7 +65,41 @@ export class BitCountryNftApi extends BaseNftApi {
|
|
|
58
65
|
if (!metadataCollection.metadata) {
|
|
59
66
|
return null;
|
|
60
67
|
}
|
|
61
|
-
|
|
68
|
+
if (metadataCollection.data.attributes['MetaverseId:']) {
|
|
69
|
+
const category = metadataCollection.data.attributes['Category:'];
|
|
70
|
+
const hexMetaverseId = metadataCollection.data.attributes['MetaverseId:'];
|
|
71
|
+
let metaverseId = BN_ZERO;
|
|
72
|
+
try {
|
|
73
|
+
metaverseId = hexToBn(hexMetaverseId);
|
|
74
|
+
} catch (e) {
|
|
75
|
+
console.warn('Error parsing metaverse id', e);
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
name: `${category} #${collectionId}`,
|
|
79
|
+
metaverseId: metaverseId.toString()
|
|
80
|
+
};
|
|
81
|
+
} else {
|
|
82
|
+
return await fetch(BIT_COUNTRY_IPFS_SERVER + metadataCollection.metadata).then(resp => resp.json());
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
parseMetadata(data) {
|
|
86
|
+
const traitList = data !== null && data !== void 0 && data.traits ? data.traits : data === null || data === void 0 ? void 0 : data.attributes;
|
|
87
|
+
const propertiesMap = {};
|
|
88
|
+
if (traitList) {
|
|
89
|
+
traitList.forEach(traitMap => {
|
|
90
|
+
propertiesMap[traitMap.trait_type] = {
|
|
91
|
+
value: traitMap.value
|
|
92
|
+
};
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
name: data === null || data === void 0 ? void 0 : data.name,
|
|
97
|
+
image: data !== null && data !== void 0 && data.image_url ? this.parseUrl(data.image_url) : this.parseUrl(data === null || data === void 0 ? void 0 : data.image),
|
|
98
|
+
description: data === null || data === void 0 ? void 0 : data.description,
|
|
99
|
+
properties: propertiesMap,
|
|
100
|
+
externalUrl: data === null || data === void 0 ? void 0 : data.external_url,
|
|
101
|
+
chain: this.chain
|
|
102
|
+
};
|
|
62
103
|
}
|
|
63
104
|
async fetchNfts(params) {
|
|
64
105
|
try {
|
|
@@ -73,7 +114,6 @@ export class BitCountryNftApi extends BaseNftApi {
|
|
|
73
114
|
const assetIds = await this.getNfts([address]);
|
|
74
115
|
try {
|
|
75
116
|
if (!assetIds || assetIds.length === 0) {
|
|
76
|
-
params.cleanUpNfts(this.chain, address, [], [], true);
|
|
77
117
|
return;
|
|
78
118
|
}
|
|
79
119
|
const collectionIds = [];
|
|
@@ -86,18 +126,10 @@ export class BitCountryNftApi extends BaseNftApi {
|
|
|
86
126
|
}
|
|
87
127
|
nftIds.push(parsedTokenId);
|
|
88
128
|
const [tokenInfo, collectionMeta] = await Promise.all([this.getTokenDetails(assetId), this.getCollectionDetails(parsedClassId)]);
|
|
89
|
-
const parsedNft =
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access
|
|
94
|
-
description: tokenInfo && tokenInfo.description ? tokenInfo.description : collectionMeta === null || collectionMeta === void 0 ? void 0 : collectionMeta.description,
|
|
95
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment
|
|
96
|
-
image: tokenInfo && tokenInfo.image_url ? this.parseUrl(tokenInfo === null || tokenInfo === void 0 ? void 0 : tokenInfo.image_url) : this.parseUrl(collectionMeta === null || collectionMeta === void 0 ? void 0 : collectionMeta.image_url),
|
|
97
|
-
collectionId: parsedClassId,
|
|
98
|
-
chain: this.chain,
|
|
99
|
-
owner: address
|
|
100
|
-
};
|
|
129
|
+
const parsedNft = this.parseMetadata(tokenInfo);
|
|
130
|
+
parsedNft.collectionId = parsedClassId;
|
|
131
|
+
parsedNft.id = parsedTokenId;
|
|
132
|
+
parsedNft.owner = address;
|
|
101
133
|
const parsedCollection = {
|
|
102
134
|
collectionId: parsedClassId,
|
|
103
135
|
chain: this.chain,
|
|
@@ -109,7 +141,6 @@ export class BitCountryNftApi extends BaseNftApi {
|
|
|
109
141
|
params.updateItem(this.chain, parsedNft, address);
|
|
110
142
|
params.updateCollection(this.chain, parsedCollection);
|
|
111
143
|
}));
|
|
112
|
-
params.cleanUpNfts(this.chain, address, collectionIds, nftIds);
|
|
113
144
|
} catch (e) {
|
|
114
145
|
console.error(`${this.chain}`, e);
|
|
115
146
|
}
|
package/koni/api/nft/config.d.ts
CHANGED
|
@@ -6,7 +6,8 @@ export declare const SINGULAR_V1_COLLECTION_ENDPOINT = "https://singular.rmrk.ap
|
|
|
6
6
|
export declare const SINGULAR_V2_COLLECTION_ENDPOINT = "https://singular.app/api/rmrk2/collection/";
|
|
7
7
|
export declare const KANARIA_EXTERNAL_SERVER = "https://kanaria.rmrk.app/catalogue/";
|
|
8
8
|
export declare const CLOUDFLARE_PINATA_SERVER = "https://cloudflare-ipfs.com/ipfs/";
|
|
9
|
-
export declare const
|
|
9
|
+
export declare const BIT_COUNTRY_IPFS_SERVER = "https://ipfs-cdn.bit.country/";
|
|
10
|
+
export declare const BIT_COUNTRY_LAND_ESTATE_METADATA_API = "https://pioneer-api.bit.country/metadata/landTokenUriPioneer";
|
|
10
11
|
export declare const BIT_COUNTRY_THUMBNAIL_RESOLVER = "https://res.cloudinary.com/ddftctzph/image/upload/c_scale,q_100,w_250/production-ipfs/asset/";
|
|
11
12
|
export declare const CF_IPFS_GATEWAY = "https://cf-ipfs.com/ipfs/";
|
|
12
13
|
export declare const PINATA_IPFS_GATEWAY = "https://gateway.pinata.cloud/ipfs/";
|
package/koni/api/nft/config.js
CHANGED
|
@@ -10,7 +10,8 @@ export const SINGULAR_V1_COLLECTION_ENDPOINT = 'https://singular.rmrk.app/api/rm
|
|
|
10
10
|
export const SINGULAR_V2_COLLECTION_ENDPOINT = 'https://singular.app/api/rmrk2/collection/';
|
|
11
11
|
export const KANARIA_EXTERNAL_SERVER = 'https://kanaria.rmrk.app/catalogue/';
|
|
12
12
|
export const CLOUDFLARE_PINATA_SERVER = 'https://cloudflare-ipfs.com/ipfs/';
|
|
13
|
-
export const
|
|
13
|
+
export const BIT_COUNTRY_IPFS_SERVER = 'https://ipfs-cdn.bit.country/';
|
|
14
|
+
export const BIT_COUNTRY_LAND_ESTATE_METADATA_API = 'https://pioneer-api.bit.country/metadata/landTokenUriPioneer';
|
|
14
15
|
export const BIT_COUNTRY_THUMBNAIL_RESOLVER = 'https://res.cloudinary.com/ddftctzph/image/upload/c_scale,q_100,w_250/production-ipfs/asset/';
|
|
15
16
|
export const CF_IPFS_GATEWAY = 'https://cf-ipfs.com/ipfs/';
|
|
16
17
|
export const PINATA_IPFS_GATEWAY = 'https://gateway.pinata.cloud/ipfs/';
|
|
@@ -85,7 +85,6 @@ export class EvmNftApi extends BaseNftApi {
|
|
|
85
85
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
|
|
86
86
|
const balance = await contract.methods.balanceOf(address).call();
|
|
87
87
|
if (Number(balance) === 0) {
|
|
88
|
-
nftParams.cleanUpNfts(this.chain, address, [smartContract], []);
|
|
89
88
|
return;
|
|
90
89
|
}
|
|
91
90
|
const itemIndexes = [];
|
|
@@ -140,9 +139,6 @@ export class EvmNftApi extends BaseNftApi {
|
|
|
140
139
|
originAsset: tokenInfo.slug
|
|
141
140
|
};
|
|
142
141
|
nftParams.updateCollection(this.chain, nftCollection);
|
|
143
|
-
Object.entries(nftOwnerMap).forEach(([owner, nftIds]) => {
|
|
144
|
-
nftParams.cleanUpNfts(this.chain, owner, [smartContract], nftIds);
|
|
145
|
-
});
|
|
146
142
|
}
|
|
147
143
|
}
|
|
148
144
|
async handleNfts(params) {
|
package/koni/api/nft/index.d.ts
CHANGED
|
@@ -17,5 +17,5 @@ export declare class NftHandler {
|
|
|
17
17
|
setAddresses(addresses: string[]): void;
|
|
18
18
|
private setupNftContracts;
|
|
19
19
|
private setupApi;
|
|
20
|
-
handleNfts(nftContracts: _ChainAsset[], updateItem: (chain: string, data: NftItem, owner: string) => void, updateCollection: (chain: string, data: NftCollection) => void
|
|
20
|
+
handleNfts(nftContracts: _ChainAsset[], updateItem: (chain: string, data: NftItem, owner: string) => void, updateCollection: (chain: string, data: NftCollection) => void): Promise<void>;
|
|
21
21
|
}
|
package/koni/api/nft/index.js
CHANGED
|
@@ -123,14 +123,13 @@ export class NftHandler {
|
|
|
123
123
|
console.error(e);
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
|
-
async handleNfts(nftContracts, updateItem, updateCollection
|
|
126
|
+
async handleNfts(nftContracts, updateItem, updateCollection) {
|
|
127
127
|
this.setupApi();
|
|
128
128
|
this.setupNftContracts(nftContracts);
|
|
129
129
|
await Promise.all(this.handlers.map(async handler => {
|
|
130
130
|
await handler.fetchNfts({
|
|
131
131
|
updateItem,
|
|
132
|
-
updateCollection
|
|
133
|
-
cleanUpNfts
|
|
132
|
+
updateCollection
|
|
134
133
|
});
|
|
135
134
|
}));
|
|
136
135
|
}
|
|
@@ -82,7 +82,6 @@ export class KaruraNftApi extends BaseNftApi {
|
|
|
82
82
|
const assetIds = await this.getNfts([address]);
|
|
83
83
|
try {
|
|
84
84
|
if (!assetIds || assetIds.length === 0) {
|
|
85
|
-
params.cleanUpNfts(this.chain, address, [], [], true);
|
|
86
85
|
return;
|
|
87
86
|
}
|
|
88
87
|
const collectionIds = [];
|
|
@@ -116,7 +115,6 @@ export class KaruraNftApi extends BaseNftApi {
|
|
|
116
115
|
params.updateItem(this.chain, parsedNft, address);
|
|
117
116
|
params.updateCollection(this.chain, parsedCollection);
|
|
118
117
|
}));
|
|
119
|
-
params.cleanUpNfts(this.chain, address, collectionIds, nftIds);
|
|
120
118
|
} catch (e) {
|
|
121
119
|
console.error(`${this.chain}`, e);
|
|
122
120
|
}
|
package/koni/api/nft/nft.d.ts
CHANGED
|
@@ -3,7 +3,6 @@ import { _EvmApi, _SubstrateApi } from '@subwallet/extension-base/services/chain
|
|
|
3
3
|
export interface HandleNftParams {
|
|
4
4
|
updateItem: (chain: string, data: NftItem, owner: string) => void;
|
|
5
5
|
updateCollection: (chain: string, data: NftCollection) => void;
|
|
6
|
-
cleanUpNfts: (chain: string, owner: string, collectionId: string[], nftIds: string[], ownNothing?: boolean) => void;
|
|
7
6
|
}
|
|
8
7
|
export declare abstract class BaseNftApi {
|
|
9
8
|
chain: string;
|