@subwallet/extension-base 1.1.45-0 → 1.1.47-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.
@@ -29,12 +29,13 @@ var _exportNames = {
29
29
  IGNORE_GET_SUBSTRATE_FEATURES_LIST: true,
30
30
  IGNORE_QR_SIGNER: true,
31
31
  XCM_MIN_AMOUNT_RATIO: true,
32
+ XCM_FEE_RATIO: true,
32
33
  GAS_PRICE_RATIO: true,
33
34
  NETWORK_MULTI_GAS_FEE: true,
34
35
  ORDINAL_COLLECTION: true,
35
36
  ORDINAL_METHODS: true
36
37
  };
37
- exports.XCM_MIN_AMOUNT_RATIO = exports.SUB_TOKEN_REFRESH_BALANCE_INTERVAL = exports.ORDINAL_METHODS = exports.ORDINAL_COLLECTION = exports.NETWORK_MULTI_GAS_FEE = exports.MANTA_PAY_BALANCE_INTERVAL = exports.IGNORE_QR_SIGNER = exports.IGNORE_GET_SUBSTRATE_FEATURES_LIST = exports.GAS_PRICE_RATIO = exports.CRON_SYNC_MANTA_PAY = exports.CRON_REFRESH_STAKING_REWARD_INTERVAL = exports.CRON_REFRESH_STAKING_REWARD_FAST_INTERVAL = exports.CRON_REFRESH_PRICE_INTERVAL = exports.CRON_REFRESH_NFT_INTERVAL = exports.CRON_REFRESH_HISTORY_INTERVAL = exports.CRON_REFRESH_EARNING_REWARD_HISTORY_INTERVAL = exports.CRON_REFRESH_CHAIN_STAKING_METADATA = exports.CRON_REFRESH_CHAIN_NOMINATOR_METADATA = exports.CRON_RECOVER_HISTORY_INTERVAL = exports.CRON_GET_API_MAP_STATUS = exports.CRON_AUTO_RECOVER_WEB3_INTERVAL = exports.CRON_AUTO_RECOVER_DOTSAMA_INTERVAL = exports.BASE_SECOND_INTERVAL = exports.BASE_MINUTE_INTERVAL = exports.ASTAR_REFRESH_BALANCE_INTERVAL = exports.ALL_NETWORK_KEY = exports.ALL_GENESIS_HASH = exports.ALL_ACCOUNT_KEY = exports.ACALA_REFRESH_CROWDLOAN_INTERVAL = void 0;
38
+ exports.XCM_MIN_AMOUNT_RATIO = exports.XCM_FEE_RATIO = exports.SUB_TOKEN_REFRESH_BALANCE_INTERVAL = exports.ORDINAL_METHODS = exports.ORDINAL_COLLECTION = exports.NETWORK_MULTI_GAS_FEE = exports.MANTA_PAY_BALANCE_INTERVAL = exports.IGNORE_QR_SIGNER = exports.IGNORE_GET_SUBSTRATE_FEATURES_LIST = exports.GAS_PRICE_RATIO = exports.CRON_SYNC_MANTA_PAY = exports.CRON_REFRESH_STAKING_REWARD_INTERVAL = exports.CRON_REFRESH_STAKING_REWARD_FAST_INTERVAL = exports.CRON_REFRESH_PRICE_INTERVAL = exports.CRON_REFRESH_NFT_INTERVAL = exports.CRON_REFRESH_HISTORY_INTERVAL = exports.CRON_REFRESH_EARNING_REWARD_HISTORY_INTERVAL = exports.CRON_REFRESH_CHAIN_STAKING_METADATA = exports.CRON_REFRESH_CHAIN_NOMINATOR_METADATA = exports.CRON_RECOVER_HISTORY_INTERVAL = exports.CRON_GET_API_MAP_STATUS = exports.CRON_AUTO_RECOVER_WEB3_INTERVAL = exports.CRON_AUTO_RECOVER_DOTSAMA_INTERVAL = exports.BASE_SECOND_INTERVAL = exports.BASE_MINUTE_INTERVAL = exports.ASTAR_REFRESH_BALANCE_INTERVAL = exports.ALL_NETWORK_KEY = exports.ALL_GENESIS_HASH = exports.ALL_ACCOUNT_KEY = exports.ACALA_REFRESH_CROWDLOAN_INTERVAL = void 0;
38
39
  var _staking = require("./staking");
39
40
  Object.keys(_staking).forEach(function (key) {
40
41
  if (key === "default" || key === "__esModule") return;
@@ -112,6 +113,8 @@ const IGNORE_QR_SIGNER = [];
112
113
  exports.IGNORE_QR_SIGNER = IGNORE_QR_SIGNER;
113
114
  const XCM_MIN_AMOUNT_RATIO = 1.2;
114
115
  exports.XCM_MIN_AMOUNT_RATIO = XCM_MIN_AMOUNT_RATIO;
116
+ const XCM_FEE_RATIO = 1.2;
117
+ exports.XCM_FEE_RATIO = XCM_FEE_RATIO;
115
118
  const GAS_PRICE_RATIO = 1 + 2 / 100;
116
119
  exports.GAS_PRICE_RATIO = GAS_PRICE_RATIO;
117
120
  const NETWORK_MULTI_GAS_FEE = ['*'];
@@ -1936,7 +1936,7 @@ class KoniExtension {
1936
1936
  } else {
1937
1937
  const substrateApi = this.#koniState.chainService.getSubstrateApi(networkKey);
1938
1938
  let estimatedFee;
1939
- let maxTransferable = new _util.BN(freeBalance.value);
1939
+ let maxTransferable = new _bignumber.default(freeBalance.value);
1940
1940
  try {
1941
1941
  if (isXcmTransfer) {
1942
1942
  const chainInfoMap = this.#koniState.chainService.getChainInfoMap();
@@ -1944,7 +1944,7 @@ class KoniExtension {
1944
1944
  if (!destinationTokenInfo) {
1945
1945
  estimatedFee = '0';
1946
1946
  } else {
1947
- maxTransferable = maxTransferable.sub(new _util.BN(tokenInfo.minAmount || '0'));
1947
+ maxTransferable = maxTransferable.minus(new _bignumber.default(tokenInfo.minAmount || '0').multipliedBy(_constants.XCM_FEE_RATIO));
1948
1948
  const desChainInfo = chainInfoMap[destChain];
1949
1949
  const orgChainInfo = chainInfoMap[networkKey];
1950
1950
  const recipient = !(0, _utilCrypto.isEthereumAddress)(address) && (0, _utils2._isChainEvmCompatible)(desChainInfo) && !(0, _utils2._isChainEvmCompatible)(orgChainInfo) ? (0, _util.u8aToHex)((0, _utilCrypto.addressToEvm)(address)) : address;
@@ -2001,10 +2001,10 @@ class KoniExtension {
2001
2001
  estimatedFee = '0';
2002
2002
  console.warn('Unable to estimate fee', e);
2003
2003
  }
2004
- maxTransferable = maxTransferable.sub(new _util.BN(estimatedFee));
2004
+ maxTransferable = maxTransferable.minus(new _bignumber.default(estimatedFee));
2005
2005
  return {
2006
2006
  ...freeBalance,
2007
- value: maxTransferable.gt(_util.BN_ZERO) ? maxTransferable.toString() || '0' : '0'
2007
+ value: maxTransferable.gt(_utils4.BN_ZERO) ? maxTransferable.toString() || '0' : '0'
2008
2008
  };
2009
2009
  }
2010
2010
  }
@@ -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.1.45-0'
16
+ version: '1.1.47-0'
17
17
  };
18
18
  exports.packageInfo = packageInfo;
@@ -40,7 +40,7 @@ const _BALANCE_CHAIN_GROUP = {
40
40
  genshiro: ['genshiro_testnet', 'genshiro'],
41
41
  equilibrium_parachain: ['equilibrium_parachain'],
42
42
  bifrost: ['bifrost', 'acala', 'karura', 'acala_testnet', 'pioneer', 'bitcountry', 'bifrost_dot', 'hydradx_main', 'pendulum', 'amplitude', 'continuum_network'],
43
- statemine: ['statemine', 'astar', 'shiden', 'statemint', 'moonbeam', 'moonbase', 'moonriver', 'crabParachain', 'darwinia2', 'parallel', 'calamari', 'manta_network', 'rococo_assethub', 'liberlandTest', 'liberland', 'dentnet', 'pangolin'],
43
+ statemine: ['statemine', 'astar', 'shiden', 'statemint', 'moonbeam', 'moonbase', 'moonriver', 'crabParachain', 'darwinia2', 'parallel', 'calamari', 'manta_network', 'rococo_assethub', 'liberlandTest', 'liberland', 'dentnet', 'pangolin', 'crust', 'phala'],
44
44
  kusama: ['kusama', 'kintsugi', 'kintsugi_test', 'interlay', 'acala', 'statemint', 'karura', 'bifrost'],
45
45
  // perhaps there are some runtime updates
46
46
  centrifuge: ['centrifuge'],
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
9
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
10
+ // SPDX-License-Identifier: Apache-2.0
11
+
12
+ class AutoEnableSomeTokens extends _Base.default {
13
+ async run() {
14
+ try {
15
+ const slugs = ['statemint-NATIVE-DOT', 'statemint-LOCAL-DED', 'statemint-LOCAL-PINK', 'moonbeam-LOCAL-xcDOT', 'moonbeam-LOCAL-xcPINK'];
16
+ const migratedAssetSetting = {};
17
+ for (const slug of slugs) {
18
+ migratedAssetSetting[slug] = {
19
+ visible: true
20
+ };
21
+ await this.state.chainService.updateAssetSetting(slug, {
22
+ visible: true
23
+ }, true);
24
+ }
25
+ } catch (e) {
26
+ console.error(e);
27
+ }
28
+ }
29
+ }
30
+ exports.default = AutoEnableSomeTokens;
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = exports.EVERYTIME = void 0;
8
+ var _AutoEnableSomeTokens = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/databases/AutoEnableSomeTokens"));
8
9
  var _DeleteEarningData = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/DeleteEarningData"));
9
10
  var _MigrateTransactionHistoryBySymbol = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateTransactionHistoryBySymbol"));
10
11
  var _MigrateAssetSetting = _interopRequireDefault(require("./databases/MigrateAssetSetting"));
@@ -55,7 +56,8 @@ var _default = {
55
56
  '1.1.28-01': _MigrateEarningVersion.default,
56
57
  '1.1.41-01': _DeleteChainStaking.default,
57
58
  '1.1.44-01': _MigrateAssetSetting.default,
58
- '1.1.45-01': _MigrateTransactionHistoryBySymbol.default
59
+ '1.1.45-01': _MigrateTransactionHistoryBySymbol.default,
60
+ '1.1.46-01': _AutoEnableSomeTokens.default
59
61
  // [`${EVERYTIME}-1.1.42-02`]: MigrateTransactionHistoryBySymbol
60
62
  // [`${EVERYTIME}-1`]: AutoEnableChainsTokens
61
63
  };
@@ -11,7 +11,6 @@ var _Authorize = _interopRequireDefault(require("@subwallet/extension-base/store
11
11
  var _utils2 = require("@subwallet/extension-base/utils");
12
12
  var _getId = require("@subwallet/extension-base/utils/getId");
13
13
  var _rxjs = require("rxjs");
14
- var _util = require("@polkadot/util");
15
14
  var _utilCrypto = require("@polkadot/util-crypto");
16
15
  // Copyright 2019-2022 @subwallet/extension-base authors & contributors
17
16
  // SPDX-License-Identifier: Apache-2.0
@@ -212,17 +211,58 @@ class AuthRequestHandler {
212
211
  }
213
212
  };
214
213
  };
214
+ authorizePromiseMap = {};
215
215
  async authorizeUrlV2(url, request) {
216
216
  let authList = await this.getAuthList();
217
- const accountAuthType = request.accountAuthType || 'substrate';
217
+ let accountAuthType = request.accountAuthType || 'substrate';
218
218
  request.accountAuthType = accountAuthType;
219
219
  if (!authList) {
220
220
  authList = {};
221
221
  }
222
+ const id = (0, _getId.getId)();
223
+ const promiseHandler = (0, _utils2.createPromiseHandler)();
224
+ const {
225
+ promise,
226
+ reject,
227
+ resolve
228
+ } = promiseHandler;
222
229
  const idStr = (0, _utils2.stripUrl)(url);
230
+ const isExistedAuthBothBefore = Object.entries(this.authorizeUrlSubject.value).find(_ref3 => {
231
+ let [key, data] = _ref3;
232
+ return key === idStr && data.accountAuthType === 'both';
233
+ });
234
+ if (isExistedAuthBothBefore) {
235
+ return true;
236
+ }
237
+
238
+ // Add promise to the map
239
+ this.authorizePromiseMap[id] = promiseHandler;
240
+ // Remove promise from the map after finish
241
+ promise.finally(() => {
242
+ delete this.authorizePromiseMap[id];
243
+ });
244
+
223
245
  // Do not enqueue duplicate authorization requests.
224
- const isDuplicate = Object.values(this.#authRequestsV2).some(_request => _request.idStr === idStr && _request.accountAuthType === request.accountAuthType);
225
- (0, _util.assert)(!isDuplicate, 'The source {{url}} has a pending authorization request'.replace('{{url}}', url));
246
+ const mergeKeys = [];
247
+ Object.entries(this.#authRequestsV2).forEach(_ref4 => {
248
+ let [key, _request] = _ref4;
249
+ if (_request.idStr === idStr) {
250
+ if (_request.accountAuthType !== request.accountAuthType) {
251
+ request.accountAuthType = 'both';
252
+ accountAuthType = 'both';
253
+ }
254
+ mergeKeys.push(key);
255
+ }
256
+ });
257
+
258
+ // Resolve with current promise
259
+ if (mergeKeys.length > 0) {
260
+ mergeKeys.forEach(key => {
261
+ delete this.#authRequestsV2[key];
262
+ const backupHandler = this.authorizePromiseMap[key];
263
+ promise.then(backupHandler.resolve).catch(backupHandler.reject);
264
+ });
265
+ }
226
266
  const existedAuth = authList[idStr];
227
267
  const existedAccountAuthType = existedAuth === null || existedAuth === void 0 ? void 0 : existedAuth.accountAuthType;
228
268
  const confirmAnotherType = existedAccountAuthType !== 'both' && existedAccountAuthType !== request.accountAuthType;
@@ -236,8 +276,8 @@ class AuthRequestHandler {
236
276
  if (inBlackList) {
237
277
  throw new Error('The source {{url}} is not allowed to interact with this extension'.replace('{{url}}', url));
238
278
  }
239
- request.allowedAccounts = Object.entries(existedAuth.isAllowedMap).map(_ref3 => {
240
- let [address, allowed] = _ref3;
279
+ request.allowedAccounts = Object.entries(existedAuth.isAllowedMap).map(_ref5 => {
280
+ let [address, allowed] = _ref5;
241
281
  return allowed ? address : '';
242
282
  }).filter(item => item !== '');
243
283
  let allowedListByRequestType = [...request.allowedAccounts];
@@ -270,21 +310,19 @@ class AuthRequestHandler {
270
310
  return true;
271
311
  }
272
312
  }
273
- return new Promise((resolve, reject) => {
274
- const id = (0, _getId.getId)();
275
- this.#authRequestsV2[id] = {
276
- ...this.authCompleteV2(id, url, resolve, reject),
277
- id,
278
- idStr,
279
- request,
280
- url,
281
- accountAuthType: accountAuthType
282
- };
283
- this.updateIconAuthV2();
284
- if (Object.keys(this.#authRequestsV2).length < 2) {
285
- this.#requestService.popupOpen();
286
- }
287
- });
313
+ this.#authRequestsV2[id] = {
314
+ ...this.authCompleteV2(id, url, resolve, reject),
315
+ id,
316
+ idStr,
317
+ request,
318
+ url,
319
+ accountAuthType: accountAuthType
320
+ };
321
+ this.updateIconAuthV2();
322
+ if (Object.keys(this.#authRequestsV2).length < 2 && !(mergeKeys.length > 0 && mergeKeys[mergeKeys.length - 1] !== id)) {
323
+ this.#requestService.popupOpen();
324
+ }
325
+ return promise;
288
326
  }
289
327
  getAuthRequestV2(id) {
290
328
  return this.#authRequestsV2[id];
@@ -23,6 +23,7 @@ export declare const ALL_GENESIS_HASH: null;
23
23
  export declare const IGNORE_GET_SUBSTRATE_FEATURES_LIST: string[];
24
24
  export declare const IGNORE_QR_SIGNER: string[];
25
25
  export declare const XCM_MIN_AMOUNT_RATIO = 1.2;
26
+ export declare const XCM_FEE_RATIO = 1.2;
26
27
  export declare const GAS_PRICE_RATIO: number;
27
28
  export declare const NETWORK_MULTI_GAS_FEE: string[];
28
29
  export declare const ORDINAL_COLLECTION = "__Ordinal__";
@@ -26,6 +26,7 @@ export const ALL_GENESIS_HASH = null;
26
26
  export const IGNORE_GET_SUBSTRATE_FEATURES_LIST = ['astarEvm', 'ethereum', 'ethereum_goerli', 'binance', 'binance_test', 'boba_rinkeby', 'boba', 'bobabase', 'bobabeam'];
27
27
  export const IGNORE_QR_SIGNER = [];
28
28
  export const XCM_MIN_AMOUNT_RATIO = 1.2;
29
+ export const XCM_FEE_RATIO = 1.2;
29
30
  export const GAS_PRICE_RATIO = 1 + 2 / 100;
30
31
  export const NETWORK_MULTI_GAS_FEE = ['*'];
31
32
  export const ORDINAL_COLLECTION = '__Ordinal__';
@@ -10,7 +10,7 @@ import { withErrorLog } from '@subwallet/extension-base/background/handlers/help
10
10
  import { createSubscription } from '@subwallet/extension-base/background/handlers/subscriptions';
11
11
  import { AccountExternalErrorCode, BasicTxErrorType, BasicTxWarningCode, CampaignDataType, ChainType, ExternalRequestPromiseStatus, ExtrinsicType, MantaPayEnableMessage, StakingTxErrorType, StakingType, TransferTxErrorType } from '@subwallet/extension-base/background/KoniTypes';
12
12
  import { TransactionWarning } from '@subwallet/extension-base/background/warnings/TransactionWarning';
13
- import { ALL_ACCOUNT_KEY, ALL_GENESIS_HASH, XCM_MIN_AMOUNT_RATIO } from '@subwallet/extension-base/constants';
13
+ import { ALL_ACCOUNT_KEY, ALL_GENESIS_HASH, XCM_FEE_RATIO, XCM_MIN_AMOUNT_RATIO } from '@subwallet/extension-base/constants';
14
14
  import { ALLOWED_PATH } from '@subwallet/extension-base/defaults';
15
15
  import { resolveAzeroAddressToDomain, resolveAzeroDomainToAddress } from '@subwallet/extension-base/koni/api/dotsama/domain';
16
16
  import { parseSubstrateTransaction } from '@subwallet/extension-base/koni/api/dotsama/parseTransaction';
@@ -33,7 +33,7 @@ import { WALLET_CONNECT_EIP155_NAMESPACE } from '@subwallet/extension-base/servi
33
33
  import { isProposalExpired, isSupportWalletConnectChain, isSupportWalletConnectNamespace } from '@subwallet/extension-base/services/wallet-connect-service/helpers';
34
34
  import { AccountsStore } from '@subwallet/extension-base/stores';
35
35
  import { YieldPoolType } from '@subwallet/extension-base/types';
36
- import { convertSubjectInfoToAddresses, createTransactionFromRLP, isSameAddress, reformatAddress, signatureToHex, uniqueStringArray } from '@subwallet/extension-base/utils';
36
+ import { BN_ZERO, convertSubjectInfoToAddresses, createTransactionFromRLP, isSameAddress, reformatAddress, signatureToHex, uniqueStringArray } from '@subwallet/extension-base/utils';
37
37
  import { parseContractInput, parseEvmRlp } from '@subwallet/extension-base/utils/eth/parseTransaction';
38
38
  import { balanceFormatter, formatNumber } from '@subwallet/extension-base/utils/number';
39
39
  import { createPair } from '@subwallet/keyring';
@@ -42,7 +42,7 @@ import { getSdkError } from '@walletconnect/utils';
42
42
  import BigN from 'bignumber.js';
43
43
  import { t } from 'i18next';
44
44
  import { TypeRegistry } from '@polkadot/types';
45
- import { assert, BN, BN_ZERO, hexStripPrefix, hexToU8a, isAscii, isHex, u8aToHex, u8aToString } from '@polkadot/util';
45
+ import { assert, BN, hexStripPrefix, hexToU8a, isAscii, isHex, u8aToHex, u8aToString } from '@polkadot/util';
46
46
  import { addressToEvm, base64Decode, decodeAddress, isAddress, isEthereumAddress, jsonDecrypt, keyExtractSuri, mnemonicGenerate, mnemonicValidate } from '@polkadot/util-crypto';
47
47
  const ETH_DERIVE_DEFAULT = '/m/44\'/60\'/0\'/0/0';
48
48
  function getSuri(seed, type) {
@@ -1878,7 +1878,7 @@ export default class KoniExtension {
1878
1878
  } else {
1879
1879
  const substrateApi = this.#koniState.chainService.getSubstrateApi(networkKey);
1880
1880
  let estimatedFee;
1881
- let maxTransferable = new BN(freeBalance.value);
1881
+ let maxTransferable = new BigN(freeBalance.value);
1882
1882
  try {
1883
1883
  if (isXcmTransfer) {
1884
1884
  const chainInfoMap = this.#koniState.chainService.getChainInfoMap();
@@ -1886,7 +1886,7 @@ export default class KoniExtension {
1886
1886
  if (!destinationTokenInfo) {
1887
1887
  estimatedFee = '0';
1888
1888
  } else {
1889
- maxTransferable = maxTransferable.sub(new BN(tokenInfo.minAmount || '0'));
1889
+ maxTransferable = maxTransferable.minus(new BigN(tokenInfo.minAmount || '0').multipliedBy(XCM_FEE_RATIO));
1890
1890
  const desChainInfo = chainInfoMap[destChain];
1891
1891
  const orgChainInfo = chainInfoMap[networkKey];
1892
1892
  const recipient = !isEthereumAddress(address) && _isChainEvmCompatible(desChainInfo) && !_isChainEvmCompatible(orgChainInfo) ? u8aToHex(addressToEvm(address)) : address;
@@ -1943,7 +1943,7 @@ export default class KoniExtension {
1943
1943
  estimatedFee = '0';
1944
1944
  console.warn('Unable to estimate fee', e);
1945
1945
  }
1946
- maxTransferable = maxTransferable.sub(new BN(estimatedFee));
1946
+ maxTransferable = maxTransferable.minus(new BigN(estimatedFee));
1947
1947
  return {
1948
1948
  ...freeBalance,
1949
1949
  value: maxTransferable.gt(BN_ZERO) ? maxTransferable.toString() || '0' : '0'
package/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "./cjs/detectPackage.js"
18
18
  ],
19
19
  "type": "module",
20
- "version": "1.1.45-0",
20
+ "version": "1.1.47-0",
21
21
  "main": "./cjs/index.js",
22
22
  "module": "./index.js",
23
23
  "types": "./index.d.ts",
@@ -935,6 +935,11 @@
935
935
  "require": "./cjs/services/migration-service/scripts/ClearOldStorage.js",
936
936
  "default": "./services/migration-service/scripts/ClearOldStorage.js"
937
937
  },
938
+ "./services/migration-service/scripts/databases/AutoEnableSomeTokens": {
939
+ "types": "./services/migration-service/scripts/databases/AutoEnableSomeTokens.d.ts",
940
+ "require": "./cjs/services/migration-service/scripts/databases/AutoEnableSomeTokens.js",
941
+ "default": "./services/migration-service/scripts/databases/AutoEnableSomeTokens.js"
942
+ },
938
943
  "./services/migration-service/scripts/databases/MigrateAssetSetting": {
939
944
  "types": "./services/migration-service/scripts/databases/MigrateAssetSetting.d.ts",
940
945
  "require": "./cjs/services/migration-service/scripts/databases/MigrateAssetSetting.js",
@@ -1791,11 +1796,11 @@
1791
1796
  "@reduxjs/toolkit": "^1.9.1",
1792
1797
  "@sora-substrate/type-definitions": "^1.17.7",
1793
1798
  "@substrate/connect": "^0.7.26",
1794
- "@subwallet/chain-list": "0.2.47",
1795
- "@subwallet/extension-base": "^1.1.45-0",
1796
- "@subwallet/extension-chains": "^1.1.45-0",
1797
- "@subwallet/extension-dapp": "^1.1.45-0",
1798
- "@subwallet/extension-inject": "^1.1.45-0",
1799
+ "@subwallet/chain-list": "0.2.52",
1800
+ "@subwallet/extension-base": "^1.1.47-0",
1801
+ "@subwallet/extension-chains": "^1.1.47-0",
1802
+ "@subwallet/extension-dapp": "^1.1.47-0",
1803
+ "@subwallet/extension-inject": "^1.1.47-0",
1799
1804
  "@subwallet/keyring": "^0.1.3",
1800
1805
  "@subwallet/ui-keyring": "^0.1.3",
1801
1806
  "@walletconnect/sign-client": "^2.8.4",
package/packageInfo.js CHANGED
@@ -7,5 +7,5 @@ export const packageInfo = {
7
7
  name: '@subwallet/extension-base',
8
8
  path: (import.meta && import.meta.url) ? new URL(import.meta.url).pathname.substring(0, new URL(import.meta.url).pathname.lastIndexOf('/') + 1) : 'auto',
9
9
  type: 'esm',
10
- version: '1.1.45-0'
10
+ version: '1.1.47-0'
11
11
  };
@@ -29,7 +29,7 @@ export const _BALANCE_CHAIN_GROUP = {
29
29
  genshiro: ['genshiro_testnet', 'genshiro'],
30
30
  equilibrium_parachain: ['equilibrium_parachain'],
31
31
  bifrost: ['bifrost', 'acala', 'karura', 'acala_testnet', 'pioneer', 'bitcountry', 'bifrost_dot', 'hydradx_main', 'pendulum', 'amplitude', 'continuum_network'],
32
- statemine: ['statemine', 'astar', 'shiden', 'statemint', 'moonbeam', 'moonbase', 'moonriver', 'crabParachain', 'darwinia2', 'parallel', 'calamari', 'manta_network', 'rococo_assethub', 'liberlandTest', 'liberland', 'dentnet', 'pangolin'],
32
+ statemine: ['statemine', 'astar', 'shiden', 'statemint', 'moonbeam', 'moonbase', 'moonriver', 'crabParachain', 'darwinia2', 'parallel', 'calamari', 'manta_network', 'rococo_assethub', 'liberlandTest', 'liberland', 'dentnet', 'pangolin', 'crust', 'phala'],
33
33
  kusama: ['kusama', 'kintsugi', 'kintsugi_test', 'interlay', 'acala', 'statemint', 'karura', 'bifrost'],
34
34
  // perhaps there are some runtime updates
35
35
  centrifuge: ['centrifuge'],
@@ -0,0 +1,4 @@
1
+ import BaseMigrationJob from '@subwallet/extension-base/services/migration-service/Base';
2
+ export default class AutoEnableSomeTokens extends BaseMigrationJob {
3
+ run(): Promise<void>;
4
+ }
@@ -0,0 +1,22 @@
1
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import BaseMigrationJob from '@subwallet/extension-base/services/migration-service/Base';
5
+ export default class AutoEnableSomeTokens extends BaseMigrationJob {
6
+ async run() {
7
+ try {
8
+ const slugs = ['statemint-NATIVE-DOT', 'statemint-LOCAL-DED', 'statemint-LOCAL-PINK', 'moonbeam-LOCAL-xcDOT', 'moonbeam-LOCAL-xcPINK'];
9
+ const migratedAssetSetting = {};
10
+ for (const slug of slugs) {
11
+ migratedAssetSetting[slug] = {
12
+ visible: true
13
+ };
14
+ await this.state.chainService.updateAssetSetting(slug, {
15
+ visible: true
16
+ }, true);
17
+ }
18
+ } catch (e) {
19
+ console.error(e);
20
+ }
21
+ }
22
+ }
@@ -1,6 +1,7 @@
1
1
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
+ import AutoEnableSomeTokens from '@subwallet/extension-base/services/migration-service/scripts/databases/AutoEnableSomeTokens';
4
5
  import DeleteEarningData from '@subwallet/extension-base/services/migration-service/scripts/DeleteEarningData';
5
6
  import MigrateTransactionHistoryBySymbol from '@subwallet/extension-base/services/migration-service/scripts/MigrateTransactionHistoryBySymbol';
6
7
  import MigrateAssetSetting from "./databases/MigrateAssetSetting.js";
@@ -47,7 +48,8 @@ export default {
47
48
  '1.1.28-01': MigrateEarningVersion,
48
49
  '1.1.41-01': DeleteChainStaking,
49
50
  '1.1.44-01': MigrateAssetSetting,
50
- '1.1.45-01': MigrateTransactionHistoryBySymbol
51
+ '1.1.45-01': MigrateTransactionHistoryBySymbol,
52
+ '1.1.46-01': AutoEnableSomeTokens
51
53
  // [`${EVERYTIME}-1.1.42-02`]: MigrateTransactionHistoryBySymbol
52
54
  // [`${EVERYTIME}-1`]: AutoEnableChainsTokens
53
55
  };
@@ -29,6 +29,7 @@ export default class AuthRequestHandler {
29
29
  url?: string;
30
30
  }): _ChainInfo | undefined;
31
31
  private authCompleteV2;
32
+ private authorizePromiseMap;
32
33
  authorizeUrlV2(url: string, request: RequestAuthorizeTab): Promise<boolean>;
33
34
  getAuthRequestV2(id: string): AuthRequestV2;
34
35
  get subscribeEvmChainChange(): BehaviorSubject<AuthUrls>;
@@ -4,10 +4,9 @@
4
4
  import { _isChainEvmCompatible } from '@subwallet/extension-base/services/chain-service/utils';
5
5
  import { PREDEFINED_CHAIN_DAPP_CHAIN_MAP, WEB_APP_URL } from '@subwallet/extension-base/services/request-service/constants';
6
6
  import AuthorizeStore from '@subwallet/extension-base/stores/Authorize';
7
- import { getDomainFromUrl, stripUrl } from '@subwallet/extension-base/utils';
7
+ import { createPromiseHandler, getDomainFromUrl, stripUrl } from '@subwallet/extension-base/utils';
8
8
  import { getId } from '@subwallet/extension-base/utils/getId';
9
9
  import { BehaviorSubject } from 'rxjs';
10
- import { assert } from '@polkadot/util';
11
10
  import { isEthereumAddress } from '@polkadot/util-crypto';
12
11
  const AUTH_URLS_KEY = 'authUrls';
13
12
  export default class AuthRequestHandler {
@@ -200,17 +199,54 @@ export default class AuthRequestHandler {
200
199
  }
201
200
  };
202
201
  };
202
+ authorizePromiseMap = {};
203
203
  async authorizeUrlV2(url, request) {
204
204
  let authList = await this.getAuthList();
205
- const accountAuthType = request.accountAuthType || 'substrate';
205
+ let accountAuthType = request.accountAuthType || 'substrate';
206
206
  request.accountAuthType = accountAuthType;
207
207
  if (!authList) {
208
208
  authList = {};
209
209
  }
210
+ const id = getId();
211
+ const promiseHandler = createPromiseHandler();
212
+ const {
213
+ promise,
214
+ reject,
215
+ resolve
216
+ } = promiseHandler;
210
217
  const idStr = stripUrl(url);
218
+ const isExistedAuthBothBefore = Object.entries(this.authorizeUrlSubject.value).find(([key, data]) => key === idStr && data.accountAuthType === 'both');
219
+ if (isExistedAuthBothBefore) {
220
+ return true;
221
+ }
222
+
223
+ // Add promise to the map
224
+ this.authorizePromiseMap[id] = promiseHandler;
225
+ // Remove promise from the map after finish
226
+ promise.finally(() => {
227
+ delete this.authorizePromiseMap[id];
228
+ });
229
+
211
230
  // Do not enqueue duplicate authorization requests.
212
- const isDuplicate = Object.values(this.#authRequestsV2).some(_request => _request.idStr === idStr && _request.accountAuthType === request.accountAuthType);
213
- assert(!isDuplicate, 'The source {{url}} has a pending authorization request'.replace('{{url}}', url));
231
+ const mergeKeys = [];
232
+ Object.entries(this.#authRequestsV2).forEach(([key, _request]) => {
233
+ if (_request.idStr === idStr) {
234
+ if (_request.accountAuthType !== request.accountAuthType) {
235
+ request.accountAuthType = 'both';
236
+ accountAuthType = 'both';
237
+ }
238
+ mergeKeys.push(key);
239
+ }
240
+ });
241
+
242
+ // Resolve with current promise
243
+ if (mergeKeys.length > 0) {
244
+ mergeKeys.forEach(key => {
245
+ delete this.#authRequestsV2[key];
246
+ const backupHandler = this.authorizePromiseMap[key];
247
+ promise.then(backupHandler.resolve).catch(backupHandler.reject);
248
+ });
249
+ }
214
250
  const existedAuth = authList[idStr];
215
251
  const existedAccountAuthType = existedAuth === null || existedAuth === void 0 ? void 0 : existedAuth.accountAuthType;
216
252
  const confirmAnotherType = existedAccountAuthType !== 'both' && existedAccountAuthType !== request.accountAuthType;
@@ -255,21 +291,19 @@ export default class AuthRequestHandler {
255
291
  return true;
256
292
  }
257
293
  }
258
- return new Promise((resolve, reject) => {
259
- const id = getId();
260
- this.#authRequestsV2[id] = {
261
- ...this.authCompleteV2(id, url, resolve, reject),
262
- id,
263
- idStr,
264
- request,
265
- url,
266
- accountAuthType: accountAuthType
267
- };
268
- this.updateIconAuthV2();
269
- if (Object.keys(this.#authRequestsV2).length < 2) {
270
- this.#requestService.popupOpen();
271
- }
272
- });
294
+ this.#authRequestsV2[id] = {
295
+ ...this.authCompleteV2(id, url, resolve, reject),
296
+ id,
297
+ idStr,
298
+ request,
299
+ url,
300
+ accountAuthType: accountAuthType
301
+ };
302
+ this.updateIconAuthV2();
303
+ if (Object.keys(this.#authRequestsV2).length < 2 && !(mergeKeys.length > 0 && mergeKeys[mergeKeys.length - 1] !== id)) {
304
+ this.#requestService.popupOpen();
305
+ }
306
+ return promise;
273
307
  }
274
308
  getAuthRequestV2(id) {
275
309
  return this.#authRequestsV2[id];