@subwallet/extension-base 1.0.3-0 → 1.0.4-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.
Files changed (75) hide show
  1. package/background/KoniTypes.d.ts +25 -15
  2. package/background/KoniTypes.js +1 -0
  3. package/cjs/background/KoniTypes.js +1 -0
  4. package/cjs/koni/api/staking/bonding/amplitude.js +9 -2
  5. package/cjs/koni/api/staking/bonding/astar.js +9 -1
  6. package/cjs/koni/api/staking/bonding/paraChain.js +10 -2
  7. package/cjs/koni/api/staking/bonding/relayChain.js +21 -4
  8. package/cjs/koni/background/handlers/Extension.js +61 -19
  9. package/cjs/koni/background/handlers/State.js +12 -0
  10. package/cjs/packageInfo.js +1 -1
  11. package/cjs/services/chain-service/constants.js +17 -2
  12. package/cjs/services/chain-service/handler/SubstrateChainHandler.js +1 -1
  13. package/cjs/services/chain-service/index.js +96 -18
  14. package/cjs/services/keyring-service/index.js +9 -0
  15. package/cjs/services/migration-service/index.js +7 -4
  16. package/cjs/services/migration-service/scripts/MigrateAuthUrls.js +39 -0
  17. package/cjs/services/migration-service/scripts/index.js +3 -1
  18. package/cjs/services/price-service/index.js +0 -1
  19. package/cjs/services/request-service/handler/AuthRequestHandler.js +7 -0
  20. package/cjs/services/request-service/handler/EvmRequestHandler.js +21 -0
  21. package/cjs/services/request-service/handler/MetadataRequestHandler.js +6 -0
  22. package/cjs/services/request-service/handler/SubstrateRequestHandler.js +6 -0
  23. package/cjs/services/request-service/index.js +6 -0
  24. package/cjs/services/setting-service/SettingService.js +4 -9
  25. package/cjs/services/setting-service/constants.js +12 -2
  26. package/cjs/services/storage-service/DatabaseService.js +14 -0
  27. package/cjs/services/storage-service/databases/index.js +1 -1
  28. package/cjs/services/storage-service/db-stores/BaseStore.js +3 -0
  29. package/cjs/services/transaction-service/index.js +3 -0
  30. package/koni/api/staking/bonding/amplitude.js +9 -2
  31. package/koni/api/staking/bonding/astar.js +9 -1
  32. package/koni/api/staking/bonding/paraChain.js +10 -2
  33. package/koni/api/staking/bonding/relayChain.js +21 -4
  34. package/koni/background/handlers/Extension.d.ts +1 -0
  35. package/koni/background/handlers/Extension.js +42 -1
  36. package/koni/background/handlers/State.d.ts +1 -0
  37. package/koni/background/handlers/State.js +12 -0
  38. package/package.json +21 -16
  39. package/packageInfo.js +1 -1
  40. package/services/chain-service/constants.d.ts +6 -0
  41. package/services/chain-service/constants.js +10 -1
  42. package/services/chain-service/handler/SubstrateChainHandler.js +1 -1
  43. package/services/chain-service/index.d.ts +3 -1
  44. package/services/chain-service/index.js +97 -19
  45. package/services/keyring-service/index.d.ts +1 -0
  46. package/services/keyring-service/index.js +9 -0
  47. package/services/migration-service/index.js +7 -4
  48. package/services/migration-service/scripts/MigrateAuthUrls.d.ts +4 -0
  49. package/services/migration-service/scripts/MigrateAuthUrls.js +31 -0
  50. package/services/migration-service/scripts/index.js +3 -1
  51. package/services/price-service/index.js +0 -1
  52. package/services/request-service/handler/AuthRequestHandler.d.ts +1 -0
  53. package/services/request-service/handler/AuthRequestHandler.js +7 -0
  54. package/services/request-service/handler/EvmRequestHandler.d.ts +1 -0
  55. package/services/request-service/handler/EvmRequestHandler.js +21 -0
  56. package/services/request-service/handler/MetadataRequestHandler.d.ts +1 -0
  57. package/services/request-service/handler/MetadataRequestHandler.js +6 -0
  58. package/services/request-service/handler/SubstrateRequestHandler.d.ts +1 -0
  59. package/services/request-service/handler/SubstrateRequestHandler.js +6 -0
  60. package/services/request-service/index.d.ts +1 -0
  61. package/services/request-service/index.js +6 -0
  62. package/services/setting-service/SettingService.d.ts +1 -0
  63. package/services/setting-service/SettingService.js +5 -10
  64. package/services/setting-service/constants.d.ts +2 -1
  65. package/services/setting-service/constants.js +10 -1
  66. package/services/storage-service/DatabaseService.d.ts +1 -0
  67. package/services/storage-service/DatabaseService.js +14 -0
  68. package/services/storage-service/databases/index.js +1 -1
  69. package/services/storage-service/db-stores/BaseStore.d.ts +1 -0
  70. package/services/storage-service/db-stores/BaseStore.js +3 -0
  71. package/services/transaction-service/index.d.ts +1 -0
  72. package/services/transaction-service/index.js +3 -0
  73. /package/cjs/services/chain-service/{heath-check → health-check}/index.js +0 -0
  74. /package/services/chain-service/{heath-check → health-check}/index.d.ts +0 -0
  75. /package/services/chain-service/{heath-check → health-check}/index.js +0 -0
@@ -47,7 +47,6 @@ class ChainService {
47
47
  this.chainInfoMapSubject.next(this.dataMap.chainInfoMap);
48
48
  this.chainStateMapSubject.next(this.dataMap.chainStateMap);
49
49
  this.assetRegistrySubject.next(this.dataMap.assetRegistry);
50
- this.multiChainAssetMapSubject.next(_chainList.MultiChainAssetMap);
51
50
  this.xcmRefMapSubject.next(this.getXcmRefMap());
52
51
  this.logger = (0, _logger.logger)('chain-service');
53
52
  this.refreshChainStateInterval(3000, 6);
@@ -359,7 +358,9 @@ class ChainService {
359
358
  // Business logic
360
359
  async init() {
361
360
  // TODO: reconsider the flow of initiation
362
- this.dataMap.assetRefMap = _chainList.AssetRefMap;
361
+ const [latestAssetRefMap, latestMultiChainAssetMap] = await Promise.all([this.fetchLatestData(_constants._ASSET_REF_SRC, _chainList.AssetRefMap), this.fetchLatestData(_constants._MULTI_CHAIN_ASSET_SRC, _chainList.MultiChainAssetMap)]);
362
+ this.multiChainAssetMapSubject.next(latestMultiChainAssetMap);
363
+ this.dataMap.assetRefMap = latestAssetRefMap;
363
364
  await this.initChains();
364
365
  this.chainInfoMapSubject.next(this.getChainInfoMap());
365
366
  this.chainStateMapSubject.next(this.getChainStateMap());
@@ -464,16 +465,16 @@ class ChainService {
464
465
  this.eventService.emit('chain.updateState', chainSlug);
465
466
  return true;
466
467
  }
467
- checkExistedPredefinedChain(genesisHash, evmChainId) {
468
+ checkExistedPredefinedChain(latestChainInfoMap, genesisHash, evmChainId) {
468
469
  let duplicatedSlug = '';
469
470
  if (genesisHash) {
470
- Object.values(_chainList.ChainInfoMap).forEach(chainInfo => {
471
+ Object.values(latestChainInfoMap).forEach(chainInfo => {
471
472
  if (chainInfo.substrateInfo && chainInfo.substrateInfo.genesisHash === genesisHash) {
472
473
  duplicatedSlug = chainInfo.slug;
473
474
  }
474
475
  });
475
476
  } else if (evmChainId) {
476
- Object.values(_chainList.ChainInfoMap).forEach(chainInfo => {
477
+ Object.values(latestChainInfoMap).forEach(chainInfo => {
477
478
  if (chainInfo.evmInfo && chainInfo.evmInfo.evmChainId === evmChainId) {
478
479
  duplicatedSlug = chainInfo.slug;
479
480
  }
@@ -481,8 +482,47 @@ class ChainService {
481
482
  }
482
483
  return duplicatedSlug;
483
484
  }
485
+ async fetchLatestData(src, defaultValue) {
486
+ return Promise.resolve(defaultValue);
487
+ // try {
488
+ // const timeout = new Promise((resolve) => {
489
+ // const id = setTimeout(() => {
490
+ // clearTimeout(id);
491
+ // resolve(null);
492
+ // }, 1500);
493
+ // });
494
+ // let result = defaultValue;
495
+ // const resp = await Promise.race([
496
+ // timeout,
497
+ // fetch(src)
498
+ // ]) as Response || null;
499
+ //
500
+ // if (!resp) {
501
+ // console.warn('Error fetching latest data', src);
502
+ //
503
+ // return result;
504
+ // }
505
+ //
506
+ // if (resp.ok) {
507
+ // try {
508
+ // result = await resp.json();
509
+ // console.log('Fetched latest data', src);
510
+ // } catch (err) {
511
+ // console.warn('Error parsing latest data', src, err);
512
+ // }
513
+ // }
514
+ //
515
+ // return result;
516
+ // } catch (e) {
517
+ // console.warn('Error fetching latest data', src, e);
518
+ //
519
+ // return defaultValue;
520
+ // }
521
+ }
522
+
484
523
  async initChains() {
485
524
  const storedChainSettings = await this.dbService.getAllChainStore();
525
+ const latestChainInfoMap = await this.fetchLatestData(_constants._CHAIN_INFO_SRC, _chainList.ChainInfoMap);
486
526
  const storedChainSettingMap = {};
487
527
  storedChainSettings.forEach(chainStoredSetting => {
488
528
  storedChainSettingMap[chainStoredSetting.slug] = chainStoredSetting;
@@ -491,8 +531,8 @@ class ChainService {
491
531
  const deprecatedChains = [];
492
532
  const deprecatedChainMap = {};
493
533
  if (storedChainSettings.length === 0) {
494
- this.dataMap.chainInfoMap = _chainList.ChainInfoMap;
495
- Object.values(_chainList.ChainInfoMap).forEach(chainInfo => {
534
+ this.dataMap.chainInfoMap = latestChainInfoMap;
535
+ Object.values(latestChainInfoMap).forEach(chainInfo => {
496
536
  this.dataMap.chainStateMap[chainInfo.slug] = {
497
537
  currentProvider: Object.keys(chainInfo.providers)[0],
498
538
  slug: chainInfo.slug,
@@ -508,10 +548,10 @@ class ChainService {
508
548
  });
509
549
  });
510
550
  } else {
511
- const mergedChainInfoMap = _chainList.ChainInfoMap;
551
+ const mergedChainInfoMap = latestChainInfoMap;
512
552
  for (const [storedSlug, storedChainInfo] of Object.entries(storedChainSettingMap)) {
513
- if (storedSlug in _chainList.ChainInfoMap) {
514
- // check predefined chains first, update providers and currentProvider
553
+ if (storedSlug in latestChainInfoMap) {
554
+ // check predefined chains first, keep setting for providers and currentProvider
515
555
  mergedChainInfoMap[storedSlug].providers = {
516
556
  ...storedChainInfo.providers,
517
557
  ...mergedChainInfoMap[storedSlug].providers
@@ -531,7 +571,7 @@ class ChainService {
531
571
  var _storedChainInfo$subs, _storedChainInfo$evmI;
532
572
  // only custom chains are left
533
573
  // check custom chain duplicated with predefined chain => merge into predefined chain
534
- const duplicatedDefaultSlug = this.checkExistedPredefinedChain((_storedChainInfo$subs = storedChainInfo.substrateInfo) === null || _storedChainInfo$subs === void 0 ? void 0 : _storedChainInfo$subs.genesisHash, (_storedChainInfo$evmI = storedChainInfo.evmInfo) === null || _storedChainInfo$evmI === void 0 ? void 0 : _storedChainInfo$evmI.evmChainId);
574
+ const duplicatedDefaultSlug = this.checkExistedPredefinedChain(latestChainInfoMap, (_storedChainInfo$subs = storedChainInfo.substrateInfo) === null || _storedChainInfo$subs === void 0 ? void 0 : _storedChainInfo$subs.genesisHash, (_storedChainInfo$evmI = storedChainInfo.evmInfo) === null || _storedChainInfo$evmI === void 0 ? void 0 : _storedChainInfo$evmI.evmChainId);
535
575
  if (duplicatedDefaultSlug.length > 0) {
536
576
  // merge custom chain with existed chain
537
577
  mergedChainInfoMap[duplicatedDefaultSlug].providers = {
@@ -602,10 +642,11 @@ class ChainService {
602
642
  }
603
643
  async initAssetRegistry(deprecatedCustomChainMap) {
604
644
  const storedAssetRegistry = await this.dbService.getAllAssetStore();
645
+ const latestAssetRegistry = await this.fetchLatestData(_constants._CHAIN_ASSET_SRC, _chainList.ChainAssetMap);
605
646
  if (storedAssetRegistry.length === 0) {
606
- this.dataMap.assetRegistry = _chainList.ChainAssetMap;
647
+ this.dataMap.assetRegistry = latestAssetRegistry;
607
648
  } else {
608
- const mergedAssetRegistry = _chainList.ChainAssetMap;
649
+ const mergedAssetRegistry = latestAssetRegistry;
609
650
  const parsedStoredAssetRegistry = {};
610
651
  const deprecatedAssets = [];
611
652
 
@@ -627,7 +668,7 @@ class ChainService {
627
668
  });
628
669
  for (const assetInfo of Object.values(parsedStoredAssetRegistry)) {
629
670
  let duplicated = false;
630
- for (const defaultChainAsset of Object.values(_chainList.ChainAssetMap)) {
671
+ for (const defaultChainAsset of Object.values(latestAssetRegistry)) {
631
672
  // case merge custom asset with default asset
632
673
  if ((0, _utils._isEqualSmartContractAsset)(assetInfo, defaultChainAsset)) {
633
674
  duplicated = true;
@@ -1169,13 +1210,12 @@ class ChainService {
1169
1210
  }
1170
1211
  return this.assetSettingSubject.value;
1171
1212
  }
1172
- async updateAssetSetting(assetSlug, assetSetting) {
1213
+ async updateAssetSetting(assetSlug, assetSetting, autoEnableNativeToken) {
1173
1214
  const currentAssetSettings = await this.getAssetSettings();
1174
1215
  let needUpdateSubject;
1175
1216
 
1176
1217
  // Update settings
1177
1218
  currentAssetSettings[assetSlug] = assetSetting;
1178
- this.setAssetSettings(currentAssetSettings);
1179
1219
  if (assetSetting.visible) {
1180
1220
  const assetInfo = this.getAssetBySlug(assetSlug);
1181
1221
  const chainState = this.getChainStateByKey(assetInfo.originChain);
@@ -1184,8 +1224,15 @@ class ChainService {
1184
1224
  if (chainState && !chainState.active) {
1185
1225
  this.enableChain(chainState.slug);
1186
1226
  needUpdateSubject = true;
1227
+ if (autoEnableNativeToken) {
1228
+ const nativeAsset = this.getNativeTokenInfo(assetInfo.originChain);
1229
+ currentAssetSettings[nativeAsset.slug] = {
1230
+ visible: true
1231
+ };
1232
+ }
1187
1233
  }
1188
1234
  }
1235
+ this.setAssetSettings(currentAssetSettings);
1189
1236
  return needUpdateSubject;
1190
1237
  }
1191
1238
  async updateAssetSettingByChain(chainSlug, visible) {
@@ -1203,10 +1250,41 @@ class ChainService {
1203
1250
  return this.assetSettingSubject;
1204
1251
  }
1205
1252
  async getChainLogoMap() {
1206
- return Promise.resolve(_chainList.ChainLogoMap);
1253
+ return await this.fetchLatestData(_constants._CHAIN_LOGO_MAP_SRC, _chainList.ChainLogoMap);
1207
1254
  }
1208
1255
  async getAssetLogoMap() {
1209
- return Promise.resolve(_chainList.AssetLogoMap);
1256
+ return await this.fetchLatestData(_constants._ASSET_LOGO_MAP_SRC, _chainList.AssetLogoMap);
1257
+ }
1258
+ resetWallet(resetAll) {
1259
+ if (resetAll) {
1260
+ this.setAssetSettings({});
1261
+
1262
+ // Disconnect chain
1263
+ const activeChains = this.getActiveChainInfos();
1264
+ for (const chain of Object.keys(activeChains)) {
1265
+ if (!_constants._DEFAULT_ACTIVE_CHAINS.includes(chain)) {
1266
+ this.disableChain(chain);
1267
+ }
1268
+ }
1269
+
1270
+ // Remove custom chain
1271
+ const allChains = this.getChainInfoMap();
1272
+ for (const chain of Object.keys(allChains)) {
1273
+ if ((0, _utils._isCustomChain)(chain)) {
1274
+ this.removeCustomChain(chain);
1275
+ }
1276
+ }
1277
+
1278
+ // Remove custom asset
1279
+ const assetSettings = this.getAssetSettings();
1280
+ const customToken = [];
1281
+ for (const asset of Object.keys(assetSettings)) {
1282
+ if ((0, _utils._isCustomAsset)(asset)) {
1283
+ customToken.push(asset);
1284
+ }
1285
+ }
1286
+ this.deleteCustomAssets(customToken);
1287
+ }
1210
1288
  }
1211
1289
  }
1212
1290
  exports.ChainService = ChainService;
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.KeyringService = void 0;
7
+ var _constants = require("@subwallet/extension-base/constants");
7
8
  var _stores = require("@subwallet/extension-base/stores");
8
9
  var _uiKeyring = require("@subwallet/ui-keyring");
9
10
  var _rxjs = require("rxjs");
@@ -95,5 +96,13 @@ class KeyringService {
95
96
  this.eventService.emit('account.updateCurrent', currentAccountData);
96
97
  this.currentAccountStore.set('CurrentAccountInfo', currentAccountData);
97
98
  }
99
+ resetWallet(resetAll) {
100
+ _uiKeyring.keyring.resetWallet(resetAll);
101
+ this.updateKeyringState();
102
+ this.currentAccountSubject.next({
103
+ address: _constants.ALL_ACCOUNT_KEY,
104
+ currentGenesisHash: null
105
+ });
106
+ }
98
107
  }
99
108
  exports.KeyringService = KeyringService;
@@ -19,8 +19,11 @@ class MigrationService {
19
19
  async run() {
20
20
  this.logger.log('Migrating...');
21
21
  const keys = Object.keys(_scripts.default).sort((a, b) => a.localeCompare(b));
22
- try {
23
- for (let i = 0; i < keys.length; i++) {
22
+
23
+ // Await timeout 2s
24
+ await new Promise(resolve => setTimeout(resolve, 2000));
25
+ for (let i = 0; i < keys.length; i++) {
26
+ try {
24
27
  const JobClass = _scripts.default[keys[i]];
25
28
  const key = keys[i];
26
29
  const name = JobClass.name;
@@ -38,9 +41,9 @@ class MigrationService {
38
41
  timestamp: new Date().getTime()
39
42
  });
40
43
  }
44
+ } catch (error) {
45
+ this.logger.error('Migration error: ', _scripts.default[keys[i]].name, error);
41
46
  }
42
- } catch (error) {
43
- this.logger.error('Migration error: ', error);
44
47
  }
45
48
  this.logger.log('Migration done.');
46
49
  }
@@ -0,0 +1,39 @@
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 MigrateSettings extends _Base.default {
13
+ async run() {
14
+ try {
15
+ return new Promise(resolve => {
16
+ this.state.getAuthorize(value => {
17
+ if (value) {
18
+ const key = 'app.stellaswap.com';
19
+ const stellaSwap = value[key];
20
+ if (stellaSwap) {
21
+ stellaSwap.currentEvmNetworkKey = 'moonbeam';
22
+ value[key] = stellaSwap;
23
+ this.state.setAuthorize(value, () => {
24
+ resolve();
25
+ });
26
+ } else {
27
+ resolve();
28
+ }
29
+ } else {
30
+ resolve();
31
+ }
32
+ });
33
+ });
34
+ } catch (e) {
35
+ console.error(e);
36
+ }
37
+ }
38
+ }
39
+ exports.default = MigrateSettings;
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.default = exports.EVERYTIME = void 0;
8
8
  var _AutoEnableChainsTokens = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/AutoEnableChainsTokens"));
9
+ var _MigrateAuthUrls = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateAuthUrls"));
9
10
  var _MigrateImportedToken = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateImportedToken"));
10
11
  var _MigrateNetworkSettings = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateNetworkSettings"));
11
12
  var _MigrateSettings = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateSettings"));
@@ -20,7 +21,8 @@ var _default = {
20
21
  '1.0.1-20': _MigrateImportedToken.default,
21
22
  '1.0.1-30': _MigrateTransactionHistory.default,
22
23
  '1.0.1-40': _AutoEnableChainsTokens.default,
23
- '1.0.1-50': _MigrateSettings.default
24
+ '1.0.1-50': _MigrateSettings.default,
25
+ '1.0.1-60': _MigrateAuthUrls.default
24
26
  // [`${EVERYTIME}-1`]: AutoEnableChainsTokens
25
27
  };
26
28
  exports.default = _default;
@@ -69,7 +69,6 @@ class PriceService {
69
69
  await this.eventService.waitAssetReady;
70
70
  this.status = _types.ServiceStatus.INITIALIZED;
71
71
  this.eventService.on('asset.updateState', eventHandler);
72
- this.eventService.on('asset.updateState', eventHandler);
73
72
  }
74
73
  async loadData() {
75
74
  const data = await this.dbService.getPriceStore();
@@ -298,5 +298,12 @@ class AuthRequestHandler {
298
298
  });
299
299
  });
300
300
  }
301
+ resetWallet() {
302
+ for (const request of Object.values(this.#authRequestsV2)) {
303
+ request.reject(new Error('Reset wallet'));
304
+ }
305
+ this.authSubjectV2.next([]);
306
+ this.setAuthorize({});
307
+ }
301
308
  }
302
309
  exports.default = AuthRequestHandler;
@@ -209,5 +209,26 @@ class EvmRequestHandler {
209
209
  }
210
210
  return true;
211
211
  }
212
+ resetWallet() {
213
+ const confirmations = this.confirmationsQueueSubject.getValue();
214
+ for (const [type, requests] of Object.entries(confirmations)) {
215
+ for (const confirmation of Object.values(requests)) {
216
+ const {
217
+ id
218
+ } = confirmation;
219
+ const {
220
+ resolver
221
+ } = this.confirmationsPromiseMap[id];
222
+ if (!resolver || !confirmation) {
223
+ console.error('Not found confirmation', type, id);
224
+ } else {
225
+ resolver.reject(new Error('Reset wallet'));
226
+ }
227
+ delete this.confirmationsPromiseMap[id];
228
+ delete confirmations[type][id];
229
+ }
230
+ }
231
+ this.confirmationsQueueSubject.next(confirmations);
232
+ }
212
233
  }
213
234
  exports.default = EvmRequestHandler;
@@ -81,5 +81,11 @@ class MetadataRequestHandler {
81
81
  this.#requestService.popupOpen();
82
82
  });
83
83
  }
84
+ resetWallet() {
85
+ for (const request of Object.values(this.#metaRequests)) {
86
+ request.reject(new Error('Reset wallet'));
87
+ }
88
+ this.metaSubject.next([]);
89
+ }
84
90
  }
85
91
  exports.default = MetadataRequestHandler;
@@ -101,5 +101,11 @@ class SubstrateRequestHandler {
101
101
  }
102
102
  });
103
103
  }
104
+ resetWallet() {
105
+ for (const request of Object.values(this.#substrateRequests)) {
106
+ request.reject(new Error('Reset wallet'));
107
+ }
108
+ this.signSubject.next([]);
109
+ }
104
110
  }
105
111
  exports.default = SubstrateRequestHandler;
@@ -166,5 +166,11 @@ class RequestService {
166
166
  get numRequests() {
167
167
  return this.numMetaRequests + this.numAuthRequests + this.numSubstrateRequests + this.numEvmRequests;
168
168
  }
169
+ resetWallet() {
170
+ this.#authRequestHandler.resetWallet();
171
+ this.#substrateRequestHandler.resetWallet();
172
+ this.#evmRequestHandler.resetWallet();
173
+ this.#metadataRequestHandler.resetWallet();
174
+ }
169
175
  }
170
176
  exports.default = RequestService;
@@ -18,15 +18,7 @@ class SettingService {
18
18
  getSettings(update) {
19
19
  this.settingsStore.get('Settings', value => {
20
20
  if (!value) {
21
- update({
22
- // language: 'en',
23
- browserConfirmationType: _constants.DEFAULT_NOTIFICATION_TYPE,
24
- // isShowZeroBalance: true,
25
- isShowBalance: false,
26
- accountAllLogo: '',
27
- theme: _constants.DEFAULT_THEME,
28
- camera: false
29
- });
21
+ update(_constants.DEFAULT_SETTING);
30
22
  } else {
31
23
  update(value);
32
24
  }
@@ -35,5 +27,8 @@ class SettingService {
35
27
  setSettings(data, callback) {
36
28
  this.settingsStore.set('Settings', data, callback);
37
29
  }
30
+ resetWallet() {
31
+ this.settingsStore.set('Settings', _constants.DEFAULT_SETTING);
32
+ }
38
33
  }
39
34
  exports.default = SettingService;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.DEFAULT_THEME = exports.DEFAULT_NOTIFICATION_TYPE = void 0;
6
+ exports.DEFAULT_THEME = exports.DEFAULT_SETTING = exports.DEFAULT_NOTIFICATION_TYPE = 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
@@ -11,4 +11,14 @@ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
11
11
  const DEFAULT_THEME = _KoniTypes.ThemeNames.DARK;
12
12
  exports.DEFAULT_THEME = DEFAULT_THEME;
13
13
  const DEFAULT_NOTIFICATION_TYPE = 'popup';
14
- exports.DEFAULT_NOTIFICATION_TYPE = DEFAULT_NOTIFICATION_TYPE;
14
+ exports.DEFAULT_NOTIFICATION_TYPE = DEFAULT_NOTIFICATION_TYPE;
15
+ const DEFAULT_SETTING = {
16
+ // language: 'en',
17
+ browserConfirmationType: DEFAULT_NOTIFICATION_TYPE,
18
+ // isShowZeroBalance: true,
19
+ isShowBalance: false,
20
+ accountAllLogo: '',
21
+ theme: DEFAULT_THEME,
22
+ camera: false
23
+ };
24
+ exports.DEFAULT_SETTING = DEFAULT_SETTING;
@@ -256,5 +256,19 @@ class DatabaseService {
256
256
  async getNominatorMetadata() {
257
257
  return this.stores.nominatorMetadata.getAll();
258
258
  }
259
+ async resetWallet(resetAll) {
260
+ return new Promise((resolve, reject) => {
261
+ const stores = [this.stores.balance, this.stores.nft, this.stores.nftCollection, this.stores.crowdloan, this.stores.staking, this.stores.transaction, this.stores.nominatorMetadata];
262
+ if (resetAll) {
263
+ stores.push(this.stores.chain, this.stores.asset);
264
+ }
265
+ const promises = stores.map(store => store.clear());
266
+ Promise.all(promises).then(() => {
267
+ resolve();
268
+ }).catch(e => {
269
+ reject(e);
270
+ });
271
+ });
272
+ }
259
273
  }
260
274
  exports.default = DatabaseService;
@@ -13,7 +13,7 @@ const DEFAULT_DATABASE = 'SubWalletDB_v2';
13
13
  class KoniDatabase extends _dexie.default {
14
14
  constructor() {
15
15
  let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_DATABASE;
16
- let schemaVersion = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10;
16
+ let schemaVersion = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 11;
17
17
  super(name);
18
18
  this.schemaVersion = schemaVersion;
19
19
  this.conditionalVersion(1, {
@@ -25,5 +25,8 @@ class BaseStore {
25
25
  remove(record) {
26
26
  return this.table.delete(record);
27
27
  }
28
+ clear() {
29
+ return this.table.clear();
30
+ }
28
31
  }
29
32
  exports.default = BaseStore;
@@ -798,5 +798,8 @@ class TransactionService {
798
798
  });
799
799
  return emitter;
800
800
  }
801
+ resetWallet() {
802
+ this.transactionSubject.next({});
803
+ }
801
804
  }
802
805
  exports.default = TransactionService;
@@ -42,9 +42,16 @@ export async function getAmplitudeNominatorMetadata(chainInfo, address, substrat
42
42
  const minDelegatorStake = chainApi.api.consts.parachainStaking.minDelegatorStake.toString();
43
43
  const delegatorState = _delegatorState.toPrimitive();
44
44
  const unstakingInfo = _unstakingInfo.toPrimitive();
45
- console.log('unstakingInfo ampe', unstakingInfo, !!unstakingInfo);
46
45
  if (!delegatorState && !unstakingInfo) {
47
- return;
46
+ return {
47
+ chain: chainInfo.slug,
48
+ type: StakingType.NOMINATED,
49
+ address,
50
+ status: StakingStatus.NOT_STAKING,
51
+ activeStake: '0',
52
+ nominations: [],
53
+ unstakings: []
54
+ };
48
55
  }
49
56
  let activeStake = '0';
50
57
  if (delegatorState) {
@@ -109,7 +109,15 @@ export async function getAstarNominatorMetadata(chainInfo, address, substrateApi
109
109
  });
110
110
  }
111
111
  if (nominationList.length === 0 && unstakingList.length === 0) {
112
- return;
112
+ return {
113
+ chain: chainInfo.slug,
114
+ type: StakingType.NOMINATED,
115
+ address,
116
+ status: StakingStatus.NOT_STAKING,
117
+ activeStake: '0',
118
+ nominations: [],
119
+ unstakings: []
120
+ };
113
121
  }
114
122
  const stakingStatus = getStakingStatusByNominations(bnTotalActiveStake, nominationList);
115
123
  return {
@@ -42,7 +42,7 @@ export function validateParaChainBondingCondition(chainInfo, amount, selectedCol
42
42
  const bnChainMinStake = new BN(chainStakingMetadata.minStake || '0');
43
43
  const bnCollatorMinStake = new BN(selectedCollator.minBond || '0');
44
44
  const bnMinStake = bnCollatorMinStake > bnChainMinStake ? bnCollatorMinStake : bnChainMinStake;
45
- if (!nominatorMetadata) {
45
+ if (!nominatorMetadata || nominatorMetadata.status === StakingStatus.NOT_STAKING) {
46
46
  if (!bnTotalStake.gte(bnMinStake)) {
47
47
  errors.push(new TransactionError(StakingTxErrorType.NOT_ENOUGH_MIN_STAKE));
48
48
  }
@@ -130,7 +130,15 @@ export async function getParaChainNominatorMetadata(chainInfo, address, substrat
130
130
  const _delegatorState = await chainApi.api.query.parachainStaking.delegatorState(address);
131
131
  const delegatorState = _delegatorState.toPrimitive();
132
132
  if (!delegatorState) {
133
- return;
133
+ return {
134
+ chain: chainInfo.slug,
135
+ type: StakingType.NOMINATED,
136
+ address,
137
+ status: StakingStatus.NOT_STAKING,
138
+ activeStake: '0',
139
+ nominations: [],
140
+ unstakings: []
141
+ };
134
142
  }
135
143
  let bnTotalActiveStake = BN_ZERO;
136
144
  await Promise.all(delegatorState.delegations.map(async delegation => {
@@ -34,7 +34,7 @@ export function validatePoolBondingCondition(chainInfo, amount, selectedPool, ad
34
34
  if (nominatorMetadata) {
35
35
  const bnCurrentActiveStake = new BN(nominatorMetadata.activeStake);
36
36
  bnTotalStake = bnTotalStake.add(bnCurrentActiveStake);
37
- if (!bnCurrentActiveStake.gt(BN_ZERO)) {
37
+ if (nominatorMetadata.unstakings.length > 0) {
38
38
  errors.push(new TransactionError(StakingTxErrorType.EXIST_UNSTAKING_REQUEST));
39
39
  }
40
40
  }
@@ -47,7 +47,7 @@ export function validateRelayBondingCondition(chainInfo, amount, selectedValidat
47
47
  const errors = [];
48
48
  let bnTotalStake = new BN(amount);
49
49
  const bnMinStake = new BN(chainStakingMetadata.minStake);
50
- if (!nominatorMetadata) {
50
+ if (!nominatorMetadata || nominatorMetadata.status === StakingStatus.NOT_STAKING) {
51
51
  if (!bnTotalStake.gte(bnMinStake)) {
52
52
  errors.push(new TransactionError(StakingTxErrorType.NOT_ENOUGH_MIN_STAKE));
53
53
  }
@@ -145,7 +145,15 @@ export async function getRelayChainNominatorMetadata(chainInfo, address, substra
145
145
  const currentEra = _currentEra.toString();
146
146
  const bonded = _bonded.toHuman();
147
147
  if (!ledger) {
148
- return;
148
+ return {
149
+ chain,
150
+ type: StakingType.NOMINATED,
151
+ status: StakingStatus.NOT_STAKING,
152
+ address: address,
153
+ activeStake: '0',
154
+ nominations: [],
155
+ unstakings: []
156
+ };
149
157
  }
150
158
  const activeStake = ledger.active.toString();
151
159
  const nominationList = [];
@@ -225,7 +233,16 @@ export async function getRelayChainPoolMemberMetadata(chainInfo, address, substr
225
233
  const poolMemberInfo = _poolMemberInfo.toPrimitive();
226
234
  const currentEra = _currentEra.toString();
227
235
  if (!poolMemberInfo) {
228
- return;
236
+ return {
237
+ chain: chainInfo.slug,
238
+ type: StakingType.POOLED,
239
+ address,
240
+ status: StakingStatus.NOT_STAKING,
241
+ activeStake: '0',
242
+ nominations: [],
243
+ // can only join 1 pool at a time
244
+ unstakings: []
245
+ };
229
246
  }
230
247
  let stakingStatus = StakingStatus.NOT_EARNING;
231
248
  const _poolMetadata = await chainApi.api.query.nominationPools.metadata(poolMemberInfo.poolId);
@@ -169,6 +169,7 @@ export default class KoniExtension {
169
169
  private keyringUnlock;
170
170
  private keyringLock;
171
171
  private keyringExportMnemonic;
172
+ private resetWallet;
172
173
  private signingApprovePasswordV2;
173
174
  private derivationCreateMultiple;
174
175
  private derivationCreateV3;