@subwallet/extension-base 1.2.26-0 → 1.2.28-0

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.
Files changed (46) hide show
  1. package/background/KoniTypes.d.ts +7 -8
  2. package/cjs/constants/index.js +6 -3
  3. package/cjs/core/logic-validation/request.js +160 -23
  4. package/cjs/core/substrate/assets-pallet.js +34 -18
  5. package/cjs/core/substrate/foreign-asset-pallet.js +2 -9
  6. package/cjs/core/substrate/xcm-parser.js +2 -1
  7. package/cjs/koni/api/staking/bonding/utils.js +1 -0
  8. package/cjs/koni/background/handlers/State.js +35 -66
  9. package/cjs/koni/background/handlers/Tabs.js +96 -23
  10. package/cjs/packageInfo.js +1 -1
  11. package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +21 -1
  12. package/cjs/services/chain-service/index.js +1 -1
  13. package/cjs/services/earning-service/constants/chains.js +1 -3
  14. package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +31 -25
  15. package/cjs/services/earning-service/handlers/nomination-pool/index.js +1 -2
  16. package/cjs/services/mkt-campaign-service/index.js +30 -6
  17. package/cjs/services/request-service/handler/EvmRequestHandler.js +0 -1
  18. package/cjs/services/wallet-connect-service/index.js +25 -1
  19. package/constants/index.d.ts +1 -0
  20. package/constants/index.js +1 -0
  21. package/core/logic-validation/request.d.ts +22 -1
  22. package/core/logic-validation/request.js +154 -23
  23. package/core/substrate/assets-pallet.d.ts +7 -3
  24. package/core/substrate/assets-pallet.js +29 -17
  25. package/core/substrate/foreign-asset-pallet.d.ts +3 -3
  26. package/core/substrate/foreign-asset-pallet.js +2 -9
  27. package/core/substrate/types.d.ts +5 -1
  28. package/core/substrate/xcm-parser.js +2 -1
  29. package/koni/api/staking/bonding/utils.js +1 -0
  30. package/koni/background/handlers/State.d.ts +0 -1
  31. package/koni/background/handlers/State.js +19 -49
  32. package/koni/background/handlers/Tabs.d.ts +1 -0
  33. package/koni/background/handlers/Tabs.js +77 -6
  34. package/package.json +13 -11
  35. package/packageInfo.js +1 -1
  36. package/services/balance-service/helpers/subscribe/substrate/index.js +22 -2
  37. package/services/chain-service/index.js +1 -1
  38. package/services/earning-service/constants/chains.d.ts +0 -1
  39. package/services/earning-service/constants/chains.js +0 -1
  40. package/services/earning-service/handlers/native-staking/relay-chain.js +32 -26
  41. package/services/earning-service/handlers/nomination-pool/index.js +1 -2
  42. package/services/mkt-campaign-service/index.js +30 -6
  43. package/services/mkt-campaign-service/types.d.ts +2 -0
  44. package/services/request-service/handler/EvmRequestHandler.js +0 -1
  45. package/services/wallet-connect-service/index.js +24 -1
  46. package/types/yield/info/chain/target.d.ts +4 -0
@@ -22,6 +22,7 @@ var _utils2 = require("@subwallet/extension-base/utils");
22
22
  var _web = _interopRequireDefault(require("web3"));
23
23
  var _phishing = require("@polkadot/phishing");
24
24
  var _util = require("@polkadot/util");
25
+ var _utilCrypto = require("@polkadot/util-crypto");
25
26
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
26
27
  // SPDX-License-Identifier: Apache-2.0
27
28
 
@@ -286,8 +287,6 @@ class KoniTabs {
286
287
  } = _ref11;
287
288
  const cb = (0, _subscriptions.createSubscription)(id, port);
288
289
  const authInfoSubject = this.#koniState.requestService.subscribeAuthorizeUrlSubject;
289
-
290
- // Update unsubscribe from @polkadot/extension-base
291
290
  this.#accountSubs[id] = {
292
291
  subscription: authInfoSubject.subscribe(infos => {
293
292
  this.getAuthInfo(url, infos).then(authInfo => {
@@ -298,6 +297,8 @@ class KoniTabs {
298
297
  }),
299
298
  url
300
299
  };
300
+
301
+ // Update unsubscribe from @polkadot/extension-base
301
302
  port.onDisconnect.addListener(() => {
302
303
  this.accountsUnsubscribe(url, {
303
304
  id
@@ -421,10 +422,80 @@ class KoniTabs {
421
422
  date: new Date().getTime()
422
423
  }];
423
424
  }
424
- async switchEvmChain(id, url, _ref13) {
425
+ async revokePermissions(url, id, _ref13) {
425
426
  let {
426
427
  params
427
428
  } = _ref13;
429
+ if (!params || !(0, _util.isArray)(params) || params.length === 0) {
430
+ throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS, 'No list of permissions found to revoke in the parameters.');
431
+ }
432
+
433
+ // Example of a request in MetaMask wallet
434
+ // await window.ethereum.request({
435
+ // "method": "wallet_revokePermissions",
436
+ // "params": [
437
+ // {
438
+ // "eth_accounts": {}
439
+ // }
440
+ // ]
441
+ // });
442
+ // Doc: https://docs.metamask.io/wallet/reference/wallet_revokepermissions/
443
+
444
+ const permissions = new Set(Object.keys(params[0]).filter(permission => _constants.PERMISSIONS_TO_REVOKE.includes(permission)));
445
+ const permissionPromise = async permission => {
446
+ if (permission === 'eth_accounts') {
447
+ return new Promise(resolve => {
448
+ this.#koniState.getAuthorize(value => {
449
+ const urlStripped = (0, _utils2.stripUrl)(url);
450
+ if (value && value[urlStripped]) {
451
+ const {
452
+ accountAuthType,
453
+ isAllowedMap
454
+ } = {
455
+ ...value[urlStripped]
456
+ };
457
+ if (!accountAuthType) {
458
+ resolve();
459
+ }
460
+ switch (accountAuthType) {
461
+ case 'substrate':
462
+ resolve();
463
+ break;
464
+ case 'evm':
465
+ delete value[urlStripped];
466
+ break;
467
+ case 'both':
468
+ {
469
+ value[urlStripped].isAllowedMap = Object.entries(isAllowedMap).reduce((allowedMap, _ref14) => {
470
+ let [address, value] = _ref14;
471
+ if ((0, _utilCrypto.isEthereumAddress)(address)) {
472
+ allowedMap[address] = false;
473
+ } else {
474
+ allowedMap[address] = value;
475
+ }
476
+ return allowedMap;
477
+ }, {});
478
+ value[urlStripped].accountAuthType = 'substrate';
479
+ break;
480
+ }
481
+ }
482
+ this.#koniState.setAuthorize(value, () => {
483
+ resolve();
484
+ });
485
+ } else {
486
+ resolve();
487
+ }
488
+ });
489
+ });
490
+ }
491
+ };
492
+ await Promise.all(Array.from(permissions).map(permissionPromise));
493
+ return null;
494
+ }
495
+ async switchEvmChain(id, url, _ref15) {
496
+ let {
497
+ params
498
+ } = _ref15;
428
499
  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
429
500
  const chainId = params[0].chainId;
430
501
  const chainIdDec = parseInt(chainId, 16);
@@ -456,11 +527,11 @@ class KoniTabs {
456
527
  }
457
528
  return null;
458
529
  }
459
- async addEvmToken(id, url, _ref14) {
530
+ async addEvmToken(id, url, _ref16) {
460
531
  var _input$type, _input$options, _input$options2, _input$options3, _input$options4, _input$options5;
461
532
  let {
462
533
  params
463
- } = _ref14;
534
+ } = _ref16;
464
535
  const input = params;
465
536
  const _tokenType = (input === null || input === void 0 ? void 0 : (_input$type = input.type) === null || _input$type === void 0 ? void 0 : _input$type.toLowerCase()) || '';
466
537
  if (_tokenType !== 'erc20' && _tokenType !== 'erc721') {
@@ -513,10 +584,10 @@ class KoniTabs {
513
584
 
514
585
  return await this.#koniState.addTokenConfirm(id, url, tokenInfo);
515
586
  }
516
- async addEvmChain(id, url, _ref15) {
587
+ async addEvmChain(id, url, _ref17) {
517
588
  let {
518
589
  params
519
- } = _ref15;
590
+ } = _ref17;
520
591
  const input = params;
521
592
  if (input && input.length > 0) {
522
593
  const {
@@ -719,11 +790,11 @@ class KoniTabs {
719
790
  const networkCheckInterval = setInterval(networkCheck, _constants.CRON_GET_API_MAP_STATUS);
720
791
  const provider = await this.getEvmProvider(url);
721
792
  const eventMap = {};
722
- eventMap.data = _ref16 => {
793
+ eventMap.data = _ref18 => {
723
794
  let {
724
795
  method,
725
796
  params
726
- } = _ref16;
797
+ } = _ref18;
727
798
  emitEvent('message', {
728
799
  type: method,
729
800
  data: params
@@ -732,8 +803,8 @@ class KoniTabs {
732
803
  eventMap.error = rs => {
733
804
  emitEvent('error', rs);
734
805
  };
735
- Object.entries(eventMap).forEach(_ref17 => {
736
- let [event, callback] = _ref17;
806
+ Object.entries(eventMap).forEach(_ref19 => {
807
+ let [event, callback] = _ref19;
737
808
  // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
738
809
  (provider === null || provider === void 0 ? void 0 : provider.on) && (provider === null || provider === void 0 ? void 0 : provider.on(event, callback));
739
810
  });
@@ -747,8 +818,8 @@ class KoniTabs {
747
818
  if (this.evmEventEmitterMap[url][id]) {
748
819
  delete this.evmEventEmitterMap[url][id];
749
820
  }
750
- Object.entries(eventMap).forEach(_ref18 => {
751
- let [event, callback] = _ref18;
821
+ Object.entries(eventMap).forEach(_ref20 => {
822
+ let [event, callback] = _ref20;
752
823
  // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
753
824
  (provider === null || provider === void 0 ? void 0 : provider.removeListener) && (provider === null || provider === void 0 ? void 0 : provider.removeListener(event, callback));
754
825
  });
@@ -783,11 +854,11 @@ class KoniTabs {
783
854
  }
784
855
  return provider;
785
856
  }
786
- async performWeb3Method(id, url, _ref19, callback) {
857
+ async performWeb3Method(id, url, _ref21, callback) {
787
858
  let {
788
859
  method,
789
860
  params
790
- } = _ref19;
861
+ } = _ref21;
791
862
  const provider = await this.getEvmProvider(url);
792
863
  this.checkAndHandleProviderStatus(provider);
793
864
  return new Promise((resolve, reject) => {
@@ -823,11 +894,11 @@ class KoniTabs {
823
894
  const allowedAccounts = await this.getEvmCurrentAccount(url);
824
895
  return !!allowedAccounts.find(acc => acc.toLowerCase() === address.toLowerCase());
825
896
  }
826
- async evmSign(id, url, _ref20) {
897
+ async evmSign(id, url, _ref22) {
827
898
  let {
828
899
  method,
829
900
  params
830
- } = _ref20;
901
+ } = _ref22;
831
902
  const signResult = await this.#koniState.evmSign(id, url, method, params);
832
903
  if (signResult) {
833
904
  return signResult;
@@ -835,10 +906,10 @@ class KoniTabs {
835
906
  throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS, 'Failed to sign message');
836
907
  }
837
908
  }
838
- async evmSendTransaction(id, url, _ref21) {
909
+ async evmSendTransaction(id, url, _ref23) {
839
910
  let {
840
911
  params
841
- } = _ref21;
912
+ } = _ref23;
842
913
  const transactionParams = params[0];
843
914
  const transactionHash = await this.#koniState.evmSendTransaction(id, url, transactionParams);
844
915
  if (!transactionHash) {
@@ -881,6 +952,8 @@ class KoniTabs {
881
952
  return await this.getEvmPermission(url, id);
882
953
  case 'wallet_getPermissions':
883
954
  return await this.getEvmPermission(url, id);
955
+ case 'wallet_revokePermissions':
956
+ return await this.revokePermissions(url, id, request);
884
957
  case 'wallet_addEthereumChain':
885
958
  return await this.addEvmChain(id, url, request);
886
959
  case 'wallet_switchEthereumChain':
@@ -920,13 +993,13 @@ class KoniTabs {
920
993
  return true;
921
994
  }
922
995
  isEvmPublicRequest(type, request) {
923
- return type === 'evm(request)' && ['eth_chainId', 'net_version'].includes(request === null || request === void 0 ? void 0 : request.method);
996
+ return type === 'evm(request)' && ['eth_chainId', 'net_version', 'wallet_requestPermissions', 'wallet_getPermissions'].includes(request === null || request === void 0 ? void 0 : request.method) || type === 'evm(events.subscribe)';
924
997
  }
925
- async addPspToken(id, url, _ref22) {
998
+ async addPspToken(id, url, _ref24) {
926
999
  let {
927
1000
  genesisHash,
928
1001
  tokenInfo: input
929
- } = _ref22;
1002
+ } = _ref24;
930
1003
  const _tokenType = input.type;
931
1004
  if (_tokenType !== 'psp22' && _tokenType !== 'psp34') {
932
1005
  throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS, 'Assets type {{tokenType}} is not supported'.replace('{{tokenType}}', _tokenType));
@@ -987,7 +1060,7 @@ class KoniTabs {
987
1060
 
988
1061
  // Wait for account ready and chain ready
989
1062
  await Promise.all([this.#koniState.eventService.waitAccountReady, this.#koniState.eventService.waitChainReady]);
990
- if (type !== 'pub(authorize.tabV2)' && !this.isEvmPublicRequest(type, request)) {
1063
+ if (!['pub(authorize.tabV2)', 'pub(accounts.subscribeV2)'].includes(type) && !this.isEvmPublicRequest(type, request)) {
991
1064
  await this.#koniState.ensureUrlAuthorizedV2(url).catch(e => {
992
1065
  if (type.startsWith('evm')) {
993
1066
  throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INTERNAL_ERROR, e.message);
@@ -13,6 +13,6 @@ const packageInfo = {
13
13
  name: '@subwallet/extension-base',
14
14
  path: typeof __dirname === 'string' ? __dirname : 'auto',
15
15
  type: 'cjs',
16
- version: '1.2.26-0'
16
+ version: '1.2.28-0'
17
17
  };
18
18
  exports.packageInfo = packageInfo;
@@ -191,6 +191,16 @@ const subscribeForeignAssetBalance = async _ref2 => {
191
191
  const balances = rs[foreignAssetsAccountKey];
192
192
  const items = balances.map((_balance, index) => {
193
193
  const balanceInfo = _balance;
194
+ if (!balanceInfo) {
195
+ // no balance info response
196
+ return {
197
+ address: addresses[index],
198
+ tokenSlug: tokenInfo.slug,
199
+ free: '0',
200
+ locked: '0',
201
+ state: _KoniTypes.APIItemState.READY
202
+ };
203
+ }
194
204
  const transferableBalance = (0, _foreignAssetPallet._getForeignAssetPalletTransferable)(balanceInfo, (0, _utils2._getAssetExistentialDeposit)(tokenInfo), extrinsicType);
195
205
  const totalLockedFromTransfer = (0, _foreignAssetPallet._getForeignAssetPalletLockedBalance)(balanceInfo);
196
206
  return {
@@ -365,8 +375,18 @@ const subscribeAssetsAccountPallet = async _ref6 => {
365
375
  const balances = rs[assetsAccountKey];
366
376
  const items = balances.map((_balance, index) => {
367
377
  const balanceInfo = _balance;
378
+ if (!balanceInfo) {
379
+ // no balance info response
380
+ return {
381
+ address: addresses[index],
382
+ tokenSlug: tokenInfo.slug,
383
+ free: '0',
384
+ locked: '0',
385
+ state: _KoniTypes.APIItemState.READY
386
+ };
387
+ }
368
388
  const transferableBalance = (0, _assetsPallet._getAssetsPalletTransferable)(balanceInfo, (0, _utils2._getAssetExistentialDeposit)(tokenInfo), extrinsicType);
369
- const totalLockedFromTransfer = (0, _assetsPallet._getAssetsPalletLockedBalance)(balanceInfo);
389
+ const totalLockedFromTransfer = (0, _assetsPallet._getAssetsPalletLocked)(balanceInfo);
370
390
  return {
371
391
  address: addresses[index],
372
392
  tokenSlug: tokenInfo.slug,
@@ -28,7 +28,7 @@ const filterChainInfoMap = (data, ignoredChains) => {
28
28
  return !info.bitcoinInfo && !ignoredChains.includes(slug);
29
29
  }));
30
30
  };
31
- const ignoredList = ['bevm', 'bevmTest', 'bevm_testnet', 'layerEdge_testnet', 'merlinEvm', 'botanixEvmTest', 'syscoin_evm', 'syscoin_evm_testnet', 'rollux_evm', 'rollux_testnet', 'boolAlpha', 'boolBeta_testnet', 'core', 'satoshivm', 'satoshivm_testnet', 'ton', 'ton_testnet'];
31
+ const ignoredList = ['bevm', 'bevmTest', 'bevm_testnet', 'layerEdge_testnet', 'merlinEvm', 'botanixEvmTest', 'syscoin_evm', 'syscoin_evm_testnet', 'rollux_evm', 'rollux_testnet', 'boolAlpha', 'boolBeta_testnet', 'core', 'satoshivm', 'satoshivm_testnet', 'ton', 'ton_testnet', 'storyPartner_testnet'];
32
32
  const filterAssetInfoMap = (chainInfo, assets) => {
33
33
  return Object.fromEntries(Object.entries(assets).filter(_ref2 => {
34
34
  let [, info] = _ref2;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports._UPDATED_RUNTIME_STAKING_GROUP = exports._STAKING_CHAIN_GROUP = exports.ST_LIQUID_TOKEN_ABI = exports.MaxEraRewardPointsEras = exports.MANTA_VALIDATOR_POINTS_PER_BLOCK = exports.MANTA_MIN_DELEGATION = void 0;
6
+ exports._STAKING_CHAIN_GROUP = exports.ST_LIQUID_TOKEN_ABI = exports.MaxEraRewardPointsEras = exports.MANTA_VALIDATOR_POINTS_PER_BLOCK = exports.MANTA_MIN_DELEGATION = void 0;
7
7
  // Copyright 2019-2022 @subwallet/extension-base
8
8
  // SPDX-License-Identifier: Apache-2.0
9
9
 
@@ -25,8 +25,6 @@ const _STAKING_CHAIN_GROUP = {
25
25
  manta: ['manta_network']
26
26
  };
27
27
  exports._STAKING_CHAIN_GROUP = _STAKING_CHAIN_GROUP;
28
- const _UPDATED_RUNTIME_STAKING_GROUP = ['kusama', 'polkadot', 'westend', 'availTuringTest', 'avail_mainnet', 'dentnet'];
29
- exports._UPDATED_RUNTIME_STAKING_GROUP = _UPDATED_RUNTIME_STAKING_GROUP;
30
28
  const MaxEraRewardPointsEras = 14;
31
29
 
32
30
  // eslint-disable-next-line @typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-assignment
@@ -199,7 +199,7 @@ class RelayNativeStakingPoolHandler extends _base.default {
199
199
  let nominationStatus = _types.EarningStatus.NOT_EARNING;
200
200
  let eraStakerOtherList = [];
201
201
  let identity;
202
- if (_constants2._UPDATED_RUNTIME_STAKING_GROUP.includes(this.chain)) {
202
+ if (substrateApi.api.query.staking.erasStakersPaged) {
203
203
  // todo: review all relaychains later
204
204
  const [[_identity], _eraStaker] = await Promise.all([(0, _utils3.parseIdentity)(substrateApi, validatorAddress), substrateApi.api.query.staking.erasStakersPaged.entries(currentEra, validatorAddress)]);
205
205
  identity = _identity;
@@ -307,20 +307,19 @@ class RelayNativeStakingPoolHandler extends _base.default {
307
307
  const maxEraRewardPointsEras = _constants2.MaxEraRewardPointsEras;
308
308
  const endEraForPoints = parseInt(activeEra) - 1;
309
309
  const startEraForPoints = Math.max(endEraForPoints - maxEraRewardPointsEras + 1, 0);
310
- let _eraStakersPromise;
311
- if (chainApi.api.query.staking.erasStakersOverview) {
312
- // todo: review all relaychains later
313
- _eraStakersPromise = chainApi.api.query.staking.erasStakersOverview.entries(parseInt(currentEra));
314
- } else {
315
- _eraStakersPromise = chainApi.api.query.staking.erasStakers.entries(parseInt(currentEra));
316
- }
310
+ const _eraStakersPromise = chainApi.api.query.staking.erasStakersOverview // todo: review all relaychains later
311
+ ? chainApi.api.query.staking.erasStakersOverview.entries(parseInt(currentEra)) : chainApi.api.query.staking.erasStakers.entries(parseInt(currentEra));
317
312
  const [_totalEraStake, _eraStakers, _minBond, _stakingRewards, _validators, ..._eraRewardPoints] = await Promise.all([chainApi.api.query.staking.erasTotalStake(parseInt(currentEra)), _eraStakersPromise, chainApi.api.query.staking.minNominatorBond(), ((_chainApi$api$query$s = chainApi.api.query.stakingRewards) === null || _chainApi$api$query$s === void 0 ? void 0 : _chainApi$api$query$s.data) && chainApi.api.query.stakingRewards.data(), chainApi.api.query.staking.validators.entries(), chainApi.api.query.staking.erasRewardPoints.multi([...Array(maxEraRewardPointsEras).keys()].map(i => i + startEraForPoints))]);
318
313
  const eraRewardMap = (0, _utils.getRelayEraRewardMap)(_eraRewardPoints[0], startEraForPoints);
319
314
  const validatorPointsMap = (0, _utils.getRelayValidatorPointsMap)(eraRewardMap);
320
315
  const topValidatorList = (0, _utils.getRelayTopValidatorByPoints)(validatorPointsMap);
321
- const validators = _validators;
322
- const blockedValidatorList = (0, _utils.getRelayBlockedValidatorList)(validators);
323
- const waitingValidatorList = (0, _utils.getRelayWaitingValidatorList)(validators);
316
+ const allValidatorList = _validators;
317
+
318
+ // todo: optimize naming for all filtered validatorList: all, block, waiting, selected, waiting but is not selected, waiting but is not blocked, ...
319
+ const blockedValidatorList = (0, _utils.getRelayBlockedValidatorList)(allValidatorList);
320
+ const waitingValidatorList = (0, _utils.getRelayWaitingValidatorList)(allValidatorList); // all validators that are not blocked
321
+
322
+ // todo: improve handle waitingValidatorLedger
324
323
  const _waitingValidatorLedger = await chainApi.api.query.staking.ledger.multi(waitingValidatorList);
325
324
  const waitingValidatorLedger = {};
326
325
  if (_waitingValidatorLedger) {
@@ -334,7 +333,9 @@ class RelayNativeStakingPoolHandler extends _base.default {
334
333
  const maxNominatorRewarded = (chainApi.api.consts.staking.maxNominatorRewardedPerValidator || 0).toString();
335
334
  const bnTotalEraStake = new _util.BN(_totalEraStake.toString());
336
335
  const minBond = _minBond.toPrimitive();
337
- const [totalStakeMap, allValidatorAddresses, validatorInfoList] = this.parseEraStakerData(_eraStakers, blockedValidatorList, waitingValidatorLedger, topValidatorList, validatorPointsMap, minBond, maxNominatorRewarded, unlimitedNominatorRewarded);
336
+ const [totalStakeMap, allValidatorAddresses, allValidatorInfo] = this.parseEraStakerData(_eraStakers, blockedValidatorList, waitingValidatorLedger, topValidatorList, validatorPointsMap, minBond, maxNominatorRewarded, unlimitedNominatorRewarded);
337
+ const currentSelectedValidatorList = allValidatorInfo.currentSelectedValidatorList;
338
+ const allValidatorInfoList = [...currentSelectedValidatorList, ...allValidatorInfo.waitingValidatorList];
338
339
  const extraInfoMap = {};
339
340
  await Promise.all(allValidatorAddresses.map(async address => {
340
341
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
@@ -348,17 +349,19 @@ class RelayNativeStakingPoolHandler extends _base.default {
348
349
  };
349
350
  }));
350
351
  const decimals = this.nativeToken.decimals || 0;
351
- const bnAvgStake = (0, _utils3.applyDecimal)(bnTotalEraStake.divn(validatorInfoList.length), decimals);
352
- for (const validator of validatorInfoList) {
352
+ const bnAvgStake = (0, _utils3.applyDecimal)(bnTotalEraStake.divn(currentSelectedValidatorList.length), decimals);
353
+ for (const validator of allValidatorInfoList) {
353
354
  const commissionString = extraInfoMap[validator.address].commission;
354
355
  const commission = (0, _utils.getCommission)(commissionString);
355
- validator.expectedReturn = this.getValidatorExpectedReturn(this.chain, validator, poolInfo.statistic.totalApy, commission, _stakingRewards, allValidatorAddresses, decimals, totalStakeMap, bnAvgStake);
356
+
357
+ // the waiting validator is missing info for calculating APY
358
+ validator.expectedReturn = currentSelectedValidatorList.includes(validator) ? this.getValidatorExpectedReturn(this.chain, validator, poolInfo.statistic.totalApy, commission, _stakingRewards, allValidatorAddresses, decimals, totalStakeMap, bnAvgStake) : 0;
356
359
  validator.commission = commission;
357
360
  validator.blocked = extraInfoMap[validator.address].blocked;
358
361
  validator.identity = extraInfoMap[validator.address].identity;
359
362
  validator.isVerified = extraInfoMap[validator.address].isVerified;
360
363
  }
361
- return validatorInfoList;
364
+ return allValidatorInfoList;
362
365
  }
363
366
  getValidatorExpectedReturn(chain, validator, totalApy, commission, _stakingRewards, allValidatorAddresses, decimals, totalStakeMap, bnAvgStake) {
364
367
  if (_constants2._STAKING_CHAIN_GROUP.aleph.includes(chain)) {
@@ -377,10 +380,13 @@ class RelayNativeStakingPoolHandler extends _base.default {
377
380
  }
378
381
  }
379
382
  }
380
- parseEraStakerData(_eraStakers, blockedValidatorList, waitingValidatorList, topValidatorList, validatorPointsMap, minBond, maxNominatorRewarded, unlimitedNominatorRewarded) {
383
+ parseEraStakerData(_eraStakers, blockedValidatorList, waitingValidatorLedger, topValidatorList, validatorPointsMap, minBond, maxNominatorRewarded, unlimitedNominatorRewarded) {
381
384
  const totalStakeMap = {};
382
385
  const allValidatorAddresses = [];
383
- const validatorInfoList = [];
386
+ const allValidatorInfo = {
387
+ currentSelectedValidatorList: [],
388
+ waitingValidatorList: []
389
+ };
384
390
  for (const item of _eraStakers) {
385
391
  // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
386
392
  const rawValidatorInfo = item[0].toHuman();
@@ -398,7 +404,7 @@ class RelayNativeStakingPoolHandler extends _base.default {
398
404
  const otherStake = bnTotalStake.sub(bnOwnStake);
399
405
  totalStakeMap[validatorAddress] = bnTotalStake;
400
406
  let nominatorCount = 0;
401
- if (_constants2._UPDATED_RUNTIME_STAKING_GROUP.includes(this.chain)) {
407
+ if (rawValidatorStat.nominatorCount) {
402
408
  nominatorCount = rawValidatorStat.nominatorCount;
403
409
  } else {
404
410
  if ('others' in rawValidatorStat) {
@@ -409,7 +415,7 @@ class RelayNativeStakingPoolHandler extends _base.default {
409
415
  }
410
416
  }
411
417
  allValidatorAddresses.push(validatorAddress);
412
- validatorInfoList.push({
418
+ allValidatorInfo.currentSelectedValidatorList.push({
413
419
  address: validatorAddress,
414
420
  totalStake: bnTotalStake.toString(),
415
421
  ownStake: bnOwnStake.toString(),
@@ -427,13 +433,13 @@ class RelayNativeStakingPoolHandler extends _base.default {
427
433
  });
428
434
  }
429
435
  }
430
- for (const waitingValidator of Object.keys(waitingValidatorList)) {
436
+ for (const waitingValidator of Object.keys(waitingValidatorLedger)) {
431
437
  if (!allValidatorAddresses.includes(waitingValidator)) {
432
438
  allValidatorAddresses.push(waitingValidator);
433
- validatorInfoList.push({
439
+ allValidatorInfo.waitingValidatorList.push({
434
440
  address: waitingValidator,
435
- totalStake: waitingValidatorList[waitingValidator],
436
- ownStake: waitingValidatorList[waitingValidator],
441
+ totalStake: waitingValidatorLedger[waitingValidator],
442
+ ownStake: waitingValidatorLedger[waitingValidator],
437
443
  otherStake: '0',
438
444
  nominatorCount: 0,
439
445
  // to be added later
@@ -448,7 +454,7 @@ class RelayNativeStakingPoolHandler extends _base.default {
448
454
  });
449
455
  }
450
456
  }
451
- return [totalStakeMap, allValidatorAddresses, validatorInfoList];
457
+ return [totalStakeMap, allValidatorAddresses, allValidatorInfo];
452
458
  }
453
459
  /* Get pool targets */
454
460
 
@@ -10,7 +10,6 @@ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
10
10
  var _utils = require("@subwallet/extension-base/koni/api/staking/bonding/utils");
11
11
  var _constants = require("@subwallet/extension-base/services/chain-service/constants");
12
12
  var _utils2 = require("@subwallet/extension-base/services/chain-service/utils");
13
- var _constants2 = require("@subwallet/extension-base/services/earning-service/constants");
14
13
  var _types = require("@subwallet/extension-base/types");
15
14
  var _utils3 = require("@subwallet/extension-base/utils");
16
15
  var _bignumber = _interopRequireDefault(require("bignumber.js"));
@@ -170,7 +169,7 @@ class NominationPoolHandler extends _base.default {
170
169
  const validatorList = nominations.targets;
171
170
  await Promise.all(validatorList.map(async validatorAddress => {
172
171
  let eraStakerOtherList = [];
173
- if (_constants2._UPDATED_RUNTIME_STAKING_GROUP.includes(this.chain)) {
172
+ if (substrateApi.api.query.staking.erasStakersPaged) {
174
173
  // todo: review all relaychains later
175
174
  const _eraStaker = await substrateApi.api.query.staking.erasStakersPaged.entries(currentEra, validatorAddress);
176
175
  eraStakerOtherList = _eraStaker.flatMap(paged => paged[1].toPrimitive().others);
@@ -247,35 +247,59 @@ class MktCampaignService {
247
247
  const isValidArr = conditionBalance.map(condition => {
248
248
  return conditionMap[JSON.stringify(condition)];
249
249
  });
250
- isPassValidation.push(isValidArr.some(i => i));
250
+ if (item.comparison_operator === 'AND') {
251
+ isPassValidation.push(isValidArr.every(i => i));
252
+ } else {
253
+ isPassValidation.push(isValidArr.some(i => i));
254
+ }
251
255
  }
252
256
  if (conditionEarning && conditionEarning.length) {
253
257
  const isValidArr = conditionEarning.map(condition => {
254
258
  return conditionMap[JSON.stringify(condition)];
255
259
  });
256
- isPassValidation.push(isValidArr.some(i => i));
260
+ if (item.comparison_operator === 'AND') {
261
+ isPassValidation.push(isValidArr.every(i => i));
262
+ } else {
263
+ isPassValidation.push(isValidArr.some(i => i));
264
+ }
257
265
  }
258
266
  if (conditionNft && conditionNft.length) {
259
267
  const isValidArr = conditionNft.map(condition => {
260
268
  return conditionMap[JSON.stringify(condition)];
261
269
  });
262
- isPassValidation.push(isValidArr.some(i => i));
270
+ if (item.comparison_operator === 'AND') {
271
+ isPassValidation.push(isValidArr.every(i => i));
272
+ } else {
273
+ isPassValidation.push(isValidArr.some(i => i));
274
+ }
263
275
  }
264
276
  if (conditionCrowdloan && conditionCrowdloan.length) {
265
277
  const isValidArr = conditionCrowdloan.map(condition => {
266
278
  return conditionMap[JSON.stringify(condition)];
267
279
  });
268
- isPassValidation.push(isValidArr.some(i => i));
280
+ if (item.comparison_operator === 'AND') {
281
+ isPassValidation.push(isValidArr.every(i => i));
282
+ } else {
283
+ isPassValidation.push(isValidArr.some(i => i));
284
+ }
269
285
  }
270
286
  if (conditionHasMoney && conditionHasMoney.length) {
271
287
  const isValidArr = conditionHasMoney.map(condition => {
272
288
  return conditionMap[JSON.stringify(condition)];
273
289
  });
274
- isPassValidation.push(isValidArr.some(i => i));
290
+ if (item.comparison_operator === 'AND') {
291
+ isPassValidation.push(isValidArr.every(i => i));
292
+ } else {
293
+ isPassValidation.push(isValidArr.some(i => i));
294
+ }
275
295
  }
276
296
  }
277
297
  if (isPassValidation && isPassValidation.length) {
278
- return isPassValidation.some(_i => _i);
298
+ if (item.comparison_operator === 'AND') {
299
+ return isPassValidation.every(_i => _i);
300
+ } else {
301
+ return isPassValidation.some(_i => _i);
302
+ }
279
303
  } else {
280
304
  return true;
281
305
  }
@@ -26,7 +26,6 @@ class EvmRequestHandler {
26
26
  confirmationsQueueSubject = new _rxjs.BehaviorSubject({
27
27
  addNetworkRequest: {},
28
28
  addTokenRequest: {},
29
- switchNetworkRequest: {},
30
29
  evmSignatureRequest: {},
31
30
  evmSendTransactionRequest: {},
32
31
  evmWatchTransactionRequest: {},
@@ -57,6 +57,7 @@ var _option = /*#__PURE__*/(0, _classPrivateFieldLooseKey2.default)("option");
57
57
  var _updateSessions = /*#__PURE__*/(0, _classPrivateFieldLooseKey2.default)("updateSessions");
58
58
  var _onSessionProposal = /*#__PURE__*/(0, _classPrivateFieldLooseKey2.default)("onSessionProposal");
59
59
  var _onSessionRequest = /*#__PURE__*/(0, _classPrivateFieldLooseKey2.default)("onSessionRequest");
60
+ var _onPingReply = /*#__PURE__*/(0, _classPrivateFieldLooseKey2.default)("onPingReply");
60
61
  var _createListener = /*#__PURE__*/(0, _classPrivateFieldLooseKey2.default)("createListener");
61
62
  var _removeListener = /*#__PURE__*/(0, _classPrivateFieldLooseKey2.default)("removeListener");
62
63
  var _checkClient = /*#__PURE__*/(0, _classPrivateFieldLooseKey2.default)("checkClient");
@@ -72,6 +73,9 @@ class WalletConnectService {
72
73
  Object.defineProperty(this, _createListener, {
73
74
  value: _createListener2
74
75
  });
76
+ Object.defineProperty(this, _onPingReply, {
77
+ value: _onPingReply2
78
+ });
75
79
  Object.defineProperty(this, _onSessionRequest, {
76
80
  value: _onSessionRequest2
77
81
  });
@@ -318,11 +322,31 @@ function _onSessionRequest2(requestEvent) {
318
322
  }).catch(console.error);
319
323
  }
320
324
  }
325
+ async function _onPingReply2(_ref4) {
326
+ let {
327
+ topic
328
+ } = _ref4;
329
+ // Doc: https://specs.walletconnect.com/2.0/specs/clients/sign/session-events#session_ping
330
+
331
+ (0, _classPrivateFieldLooseBase2.default)(this, _checkClient)[_checkClient]();
332
+ try {
333
+ var _requestSession$names, _requestSession$names2;
334
+ const requestSession = this.getSession(topic);
335
+ const sessionAccounts = (((_requestSession$names = requestSession.namespaces.eip155) === null || _requestSession$names === void 0 ? void 0 : _requestSession$names.accounts) || []).concat(((_requestSession$names2 = requestSession.namespaces.polkadot) === null || _requestSession$names2 === void 0 ? void 0 : _requestSession$names2.accounts) || []);
336
+ if (sessionAccounts.length > 0 && (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) {
337
+ await (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client].ping({
338
+ topic
339
+ });
340
+ }
341
+ } catch (e) {
342
+ console.error(e);
343
+ }
344
+ }
321
345
  function _createListener2() {
322
346
  var _classPrivateFieldLoo14, _classPrivateFieldLoo15, _classPrivateFieldLoo16, _classPrivateFieldLoo17, _classPrivateFieldLoo18, _classPrivateFieldLoo19;
323
347
  (_classPrivateFieldLoo14 = (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) === null || _classPrivateFieldLoo14 === void 0 ? void 0 : _classPrivateFieldLoo14.on('session_proposal', (0, _classPrivateFieldLooseBase2.default)(this, _onSessionProposal)[_onSessionProposal].bind(this));
324
348
  (_classPrivateFieldLoo15 = (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) === null || _classPrivateFieldLoo15 === void 0 ? void 0 : _classPrivateFieldLoo15.on('session_request', (0, _classPrivateFieldLooseBase2.default)(this, _onSessionRequest)[_onSessionRequest].bind(this));
325
- (_classPrivateFieldLoo16 = (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) === null || _classPrivateFieldLoo16 === void 0 ? void 0 : _classPrivateFieldLoo16.on('session_ping', data => console.log('ping', data));
349
+ (_classPrivateFieldLoo16 = (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) === null || _classPrivateFieldLoo16 === void 0 ? void 0 : _classPrivateFieldLoo16.on('session_ping', (0, _classPrivateFieldLooseBase2.default)(this, _onPingReply)[_onPingReply].bind(this));
326
350
  (_classPrivateFieldLoo17 = (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) === null || _classPrivateFieldLoo17 === void 0 ? void 0 : _classPrivateFieldLoo17.on('session_event', data => console.log('event', data));
327
351
  (_classPrivateFieldLoo18 = (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) === null || _classPrivateFieldLoo18 === void 0 ? void 0 : _classPrivateFieldLoo18.on('session_update', data => console.log('update', data));
328
352
  (_classPrivateFieldLoo19 = (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) === null || _classPrivateFieldLoo19 === void 0 ? void 0 : _classPrivateFieldLoo19.on('session_delete', (0, _classPrivateFieldLooseBase2.default)(this, _updateSessions)[_updateSessions].bind(this));
@@ -29,5 +29,6 @@ export declare const GAS_PRICE_RATIO: number;
29
29
  export declare const NETWORK_MULTI_GAS_FEE: string[];
30
30
  export declare const ORDINAL_COLLECTION = "__Ordinal__";
31
31
  export declare const ORDINAL_METHODS: string[];
32
+ export declare const PERMISSIONS_TO_REVOKE: string[];
32
33
  export * from './staking';
33
34
  export * from './storage';
@@ -32,5 +32,6 @@ export const GAS_PRICE_RATIO = 1 + 2 / 100;
32
32
  export const NETWORK_MULTI_GAS_FEE = ['*'];
33
33
  export const ORDINAL_COLLECTION = '__Ordinal__';
34
34
  export const ORDINAL_METHODS = ['drc-20', 'pol-20'];
35
+ export const PERMISSIONS_TO_REVOKE = ['eth_accounts'];
35
36
  export * from "./staking.js";
36
37
  export * from "./storage.js";