@subwallet/extension-base 1.0.4-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 (71) 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 +1 -1
  12. package/cjs/services/chain-service/handler/SubstrateChainHandler.js +1 -1
  13. package/cjs/services/chain-service/index.js +75 -26
  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 +16 -11
  39. package/packageInfo.js +1 -1
  40. package/services/chain-service/constants.js +1 -1
  41. package/services/chain-service/handler/SubstrateChainHandler.js +1 -1
  42. package/services/chain-service/index.d.ts +2 -1
  43. package/services/chain-service/index.js +75 -26
  44. package/services/keyring-service/index.d.ts +1 -0
  45. package/services/keyring-service/index.js +9 -0
  46. package/services/migration-service/index.js +7 -4
  47. package/services/migration-service/scripts/MigrateAuthUrls.d.ts +4 -0
  48. package/services/migration-service/scripts/MigrateAuthUrls.js +31 -0
  49. package/services/migration-service/scripts/index.js +3 -1
  50. package/services/price-service/index.js +0 -1
  51. package/services/request-service/handler/AuthRequestHandler.d.ts +1 -0
  52. package/services/request-service/handler/AuthRequestHandler.js +7 -0
  53. package/services/request-service/handler/EvmRequestHandler.d.ts +1 -0
  54. package/services/request-service/handler/EvmRequestHandler.js +21 -0
  55. package/services/request-service/handler/MetadataRequestHandler.d.ts +1 -0
  56. package/services/request-service/handler/MetadataRequestHandler.js +6 -0
  57. package/services/request-service/handler/SubstrateRequestHandler.d.ts +1 -0
  58. package/services/request-service/handler/SubstrateRequestHandler.js +6 -0
  59. package/services/request-service/index.d.ts +1 -0
  60. package/services/request-service/index.js +6 -0
  61. package/services/setting-service/SettingService.d.ts +1 -0
  62. package/services/setting-service/SettingService.js +5 -10
  63. package/services/setting-service/constants.d.ts +2 -1
  64. package/services/setting-service/constants.js +10 -1
  65. package/services/storage-service/DatabaseService.d.ts +1 -0
  66. package/services/storage-service/DatabaseService.js +14 -0
  67. package/services/storage-service/databases/index.js +1 -1
  68. package/services/storage-service/db-stores/BaseStore.d.ts +1 -0
  69. package/services/storage-service/db-stores/BaseStore.js +3 -0
  70. package/services/transaction-service/index.d.ts +1 -0
  71. package/services/transaction-service/index.js +3 -0
@@ -1111,7 +1111,8 @@ export declare enum StakingStatus {
1111
1111
  EARNING_REWARD = "EARNING_REWARD",
1112
1112
  PARTIALLY_EARNING = "PARTIALLY_EARNING",
1113
1113
  NOT_EARNING = "NOT_EARNING",
1114
- WAITING = "WAITING"
1114
+ WAITING = "WAITING",
1115
+ NOT_STAKING = "NOT_STAKING"
1115
1116
  }
1116
1117
  export interface NominatorMetadata {
1117
1118
  chain: string;
@@ -1245,20 +1246,6 @@ export declare type RequestWithdrawStakeExternal = InternalRequestSign<StakeWith
1245
1246
  export declare type RequestClaimRewardExternal = InternalRequestSign<StakeClaimRewardParams>;
1246
1247
  export declare type RequestCreateCompoundStakeExternal = InternalRequestSign<TuringStakeCompoundParams>;
1247
1248
  export declare type RequestCancelCompoundStakeExternal = InternalRequestSign<TuringCancelStakeCompoundParams>;
1248
- export interface KeyringState {
1249
- isReady: boolean;
1250
- hasMasterPassword: boolean;
1251
- isLocked: boolean;
1252
- }
1253
- export interface AddressBookState {
1254
- contacts: AddressJson[];
1255
- recent: AddressJson[];
1256
- }
1257
- export interface RequestChangeMasterPassword {
1258
- oldPassword?: string;
1259
- newPassword: string;
1260
- createNew: boolean;
1261
- }
1262
1249
  export declare enum ChainEditStandard {
1263
1250
  EVM = "EVM",
1264
1251
  SUBSTRATE = "SUBSTRATE",
@@ -1284,6 +1271,20 @@ export interface ChainSpecInfo {
1284
1271
  existentialDeposit: string;
1285
1272
  decimals: number;
1286
1273
  }
1274
+ export interface KeyringState {
1275
+ isReady: boolean;
1276
+ hasMasterPassword: boolean;
1277
+ isLocked: boolean;
1278
+ }
1279
+ export interface AddressBookState {
1280
+ contacts: AddressJson[];
1281
+ recent: AddressJson[];
1282
+ }
1283
+ export interface RequestChangeMasterPassword {
1284
+ oldPassword?: string;
1285
+ newPassword: string;
1286
+ createNew: boolean;
1287
+ }
1287
1288
  export interface ResponseChangeMasterPassword {
1288
1289
  status: boolean;
1289
1290
  errors: string[];
@@ -1310,12 +1311,20 @@ export interface RequestKeyringExportMnemonic {
1310
1311
  export interface ResponseKeyringExportMnemonic {
1311
1312
  result: string;
1312
1313
  }
1314
+ export interface RequestResetWallet {
1315
+ resetAll: boolean;
1316
+ }
1317
+ export interface ResponseResetWallet {
1318
+ status: boolean;
1319
+ errors: string[];
1320
+ }
1313
1321
  export interface RequestSigningApprovePasswordV2 {
1314
1322
  id: string;
1315
1323
  }
1316
1324
  export interface AssetSettingUpdateReq {
1317
1325
  tokenSlug: string;
1318
1326
  assetSetting: AssetSetting;
1327
+ autoEnableNativeToken?: boolean;
1319
1328
  }
1320
1329
  export interface RequestGetTransaction {
1321
1330
  id: string;
@@ -1493,6 +1502,7 @@ export interface KoniRequestSignatures {
1493
1502
  'pri(keyring.unlock)': [RequestUnlockKeyring, ResponseUnlockKeyring];
1494
1503
  'pri(keyring.lock)': [null, void];
1495
1504
  'pri(keyring.export.mnemonic)': [RequestKeyringExportMnemonic, ResponseKeyringExportMnemonic];
1505
+ 'pri(keyring.reset)': [RequestResetWallet, ResponseResetWallet];
1496
1506
  'pri(signing.approve.passwordV2)': [RequestSigningApprovePasswordV2, boolean];
1497
1507
  'pri(derivation.validateV2)': [RequestDeriveValidateV2, ResponseDeriveValidateV2];
1498
1508
  'pri(derivation.getList)': [RequestGetDeriveAccounts, ResponseGetDeriveAccounts];
@@ -211,6 +211,7 @@ export let StakingStatus;
211
211
  StakingStatus["PARTIALLY_EARNING"] = "PARTIALLY_EARNING";
212
212
  StakingStatus["NOT_EARNING"] = "NOT_EARNING";
213
213
  StakingStatus["WAITING"] = "WAITING";
214
+ StakingStatus["NOT_STAKING"] = "NOT_STAKING";
214
215
  })(StakingStatus || (StakingStatus = {}));
215
216
  export let ChainEditStandard;
216
217
 
@@ -219,6 +219,7 @@ exports.StakingStatus = StakingStatus;
219
219
  StakingStatus["PARTIALLY_EARNING"] = "PARTIALLY_EARNING";
220
220
  StakingStatus["NOT_EARNING"] = "NOT_EARNING";
221
221
  StakingStatus["WAITING"] = "WAITING";
222
+ StakingStatus["NOT_STAKING"] = "NOT_STAKING";
222
223
  })(StakingStatus || (exports.StakingStatus = StakingStatus = {}));
223
224
  let ChainEditStandard; // ChainService
224
225
  // for custom network
@@ -54,9 +54,16 @@ async function getAmplitudeNominatorMetadata(chainInfo, address, substrateApi) {
54
54
  const minDelegatorStake = chainApi.api.consts.parachainStaking.minDelegatorStake.toString();
55
55
  const delegatorState = _delegatorState.toPrimitive();
56
56
  const unstakingInfo = _unstakingInfo.toPrimitive();
57
- console.log('unstakingInfo ampe', unstakingInfo, !!unstakingInfo);
58
57
  if (!delegatorState && !unstakingInfo) {
59
- return;
58
+ return {
59
+ chain: chainInfo.slug,
60
+ type: _KoniTypes.StakingType.NOMINATED,
61
+ address,
62
+ status: _KoniTypes.StakingStatus.NOT_STAKING,
63
+ activeStake: '0',
64
+ nominations: [],
65
+ unstakings: []
66
+ };
60
67
  }
61
68
  let activeStake = '0';
62
69
  if (delegatorState) {
@@ -122,7 +122,15 @@ async function getAstarNominatorMetadata(chainInfo, address, substrateApi) {
122
122
  });
123
123
  }
124
124
  if (nominationList.length === 0 && unstakingList.length === 0) {
125
- return;
125
+ return {
126
+ chain: chainInfo.slug,
127
+ type: _KoniTypes.StakingType.NOMINATED,
128
+ address,
129
+ status: _KoniTypes.StakingStatus.NOT_STAKING,
130
+ activeStake: '0',
131
+ nominations: [],
132
+ unstakings: []
133
+ };
126
134
  }
127
135
  const stakingStatus = (0, _utils.getStakingStatusByNominations)(bnTotalActiveStake, nominationList);
128
136
  return {
@@ -58,7 +58,7 @@ function validateParaChainBondingCondition(chainInfo, amount, selectedCollators,
58
58
  const bnChainMinStake = new _util.BN(chainStakingMetadata.minStake || '0');
59
59
  const bnCollatorMinStake = new _util.BN(selectedCollator.minBond || '0');
60
60
  const bnMinStake = bnCollatorMinStake > bnChainMinStake ? bnCollatorMinStake : bnChainMinStake;
61
- if (!nominatorMetadata) {
61
+ if (!nominatorMetadata || nominatorMetadata.status === _KoniTypes.StakingStatus.NOT_STAKING) {
62
62
  if (!bnTotalStake.gte(bnMinStake)) {
63
63
  errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.NOT_ENOUGH_MIN_STAKE));
64
64
  }
@@ -146,7 +146,15 @@ async function getParaChainNominatorMetadata(chainInfo, address, substrateApi) {
146
146
  const _delegatorState = await chainApi.api.query.parachainStaking.delegatorState(address);
147
147
  const delegatorState = _delegatorState.toPrimitive();
148
148
  if (!delegatorState) {
149
- return;
149
+ return {
150
+ chain: chainInfo.slug,
151
+ type: _KoniTypes.StakingType.NOMINATED,
152
+ address,
153
+ status: _KoniTypes.StakingStatus.NOT_STAKING,
154
+ activeStake: '0',
155
+ nominations: [],
156
+ unstakings: []
157
+ };
150
158
  }
151
159
  let bnTotalActiveStake = _util.BN_ZERO;
152
160
  await Promise.all(delegatorState.delegations.map(async delegation => {
@@ -55,7 +55,7 @@ function validatePoolBondingCondition(chainInfo, amount, selectedPool, address,
55
55
  if (nominatorMetadata) {
56
56
  const bnCurrentActiveStake = new _util.BN(nominatorMetadata.activeStake);
57
57
  bnTotalStake = bnTotalStake.add(bnCurrentActiveStake);
58
- if (!bnCurrentActiveStake.gt(_util.BN_ZERO)) {
58
+ if (nominatorMetadata.unstakings.length > 0) {
59
59
  errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.EXIST_UNSTAKING_REQUEST));
60
60
  }
61
61
  }
@@ -68,7 +68,7 @@ function validateRelayBondingCondition(chainInfo, amount, selectedValidators, ad
68
68
  const errors = [];
69
69
  let bnTotalStake = new _util.BN(amount);
70
70
  const bnMinStake = new _util.BN(chainStakingMetadata.minStake);
71
- if (!nominatorMetadata) {
71
+ if (!nominatorMetadata || nominatorMetadata.status === _KoniTypes.StakingStatus.NOT_STAKING) {
72
72
  if (!bnTotalStake.gte(bnMinStake)) {
73
73
  errors.push(new _TransactionError.TransactionError(_KoniTypes.StakingTxErrorType.NOT_ENOUGH_MIN_STAKE));
74
74
  }
@@ -166,7 +166,15 @@ async function getRelayChainNominatorMetadata(chainInfo, address, substrateApi)
166
166
  const currentEra = _currentEra.toString();
167
167
  const bonded = _bonded.toHuman();
168
168
  if (!ledger) {
169
- return;
169
+ return {
170
+ chain,
171
+ type: _KoniTypes.StakingType.NOMINATED,
172
+ status: _KoniTypes.StakingStatus.NOT_STAKING,
173
+ address: address,
174
+ activeStake: '0',
175
+ nominations: [],
176
+ unstakings: []
177
+ };
170
178
  }
171
179
  const activeStake = ledger.active.toString();
172
180
  const nominationList = [];
@@ -246,7 +254,16 @@ async function getRelayChainPoolMemberMetadata(chainInfo, address, substrateApi)
246
254
  const poolMemberInfo = _poolMemberInfo.toPrimitive();
247
255
  const currentEra = _currentEra.toString();
248
256
  if (!poolMemberInfo) {
249
- return;
257
+ return {
258
+ chain: chainInfo.slug,
259
+ type: _KoniTypes.StakingType.POOLED,
260
+ address,
261
+ status: _KoniTypes.StakingStatus.NOT_STAKING,
262
+ activeStake: '0',
263
+ nominations: [],
264
+ // can only join 1 pool at a time
265
+ unstakings: []
266
+ };
250
267
  }
251
268
  let stakingStatus = _KoniTypes.StakingStatus.NOT_EARNING;
252
269
  const _poolMetadata = await chainApi.api.query.nominationPools.metadata(poolMemberInfo.poolId);
@@ -930,7 +930,7 @@ class KoniExtension {
930
930
  }
931
931
  async updateAssetSetting(params) {
932
932
  try {
933
- await this.#koniState.chainService.updateAssetSetting(params.tokenSlug, params.assetSetting);
933
+ await this.#koniState.chainService.updateAssetSetting(params.tokenSlug, params.assetSetting, params.autoEnableNativeToken);
934
934
  this.#koniState.eventService.emit('asset.updateState', params.tokenSlug);
935
935
  return true;
936
936
  } catch (e) {
@@ -2451,6 +2451,11 @@ class KoniExtension {
2451
2451
  chainType: _KoniTypes.ChainType.SUBSTRATE
2452
2452
  });
2453
2453
  }
2454
+
2455
+ /// Keyring state
2456
+
2457
+ // Subscribe keyring state
2458
+
2454
2459
  keyringStateSubscribe(id, port) {
2455
2460
  const cb = (0, _subscriptions.createSubscription)(id, port);
2456
2461
  const keyringStateSubject = this.#koniState.keyringService.keyringStateSubject;
@@ -2461,6 +2466,9 @@ class KoniExtension {
2461
2466
  });
2462
2467
  return this.#koniState.keyringService.keyringState;
2463
2468
  }
2469
+
2470
+ // Change master password
2471
+
2464
2472
  keyringChangeMasterPassword(_ref56) {
2465
2473
  let {
2466
2474
  createNew,
@@ -2497,6 +2505,9 @@ class KoniExtension {
2497
2505
  errors: []
2498
2506
  };
2499
2507
  }
2508
+
2509
+ // Migrate password
2510
+
2500
2511
  keyringMigrateMasterPassword(_ref57) {
2501
2512
  let {
2502
2513
  address,
@@ -2516,6 +2527,9 @@ class KoniExtension {
2516
2527
  errors: []
2517
2528
  };
2518
2529
  }
2530
+
2531
+ // Unlock wallet
2532
+
2519
2533
  keyringUnlock(_ref58) {
2520
2534
  let {
2521
2535
  password
@@ -2534,11 +2548,17 @@ class KoniExtension {
2534
2548
  errors: []
2535
2549
  };
2536
2550
  }
2551
+
2552
+ // Lock wallet
2553
+
2537
2554
  keyringLock() {
2538
2555
  _uiKeyring.keyring.lockAll();
2539
2556
  this.#koniState.updateKeyringState();
2540
2557
  clearTimeout(this.#lockTimeOut);
2541
2558
  }
2559
+
2560
+ // Export mnemonic
2561
+
2542
2562
  keyringExportMnemonic(_ref59) {
2543
2563
  let {
2544
2564
  address,
@@ -2551,11 +2571,31 @@ class KoniExtension {
2551
2571
  };
2552
2572
  }
2553
2573
 
2574
+ // Reset wallet
2575
+
2576
+ async resetWallet(_ref60) {
2577
+ let {
2578
+ resetAll
2579
+ } = _ref60;
2580
+ try {
2581
+ await this.#koniState.resetWallet(resetAll);
2582
+ return {
2583
+ errors: [],
2584
+ status: true
2585
+ };
2586
+ } catch (e) {
2587
+ return {
2588
+ errors: [e.message],
2589
+ status: false
2590
+ };
2591
+ }
2592
+ }
2593
+
2554
2594
  /// Signing external request
2555
- signingApprovePasswordV2(_ref60) {
2595
+ signingApprovePasswordV2(_ref61) {
2556
2596
  let {
2557
2597
  id
2558
- } = _ref60;
2598
+ } = _ref61;
2559
2599
  const queued = this.#koniState.getSignRequest(id);
2560
2600
  (0, _util.assert)(queued, 'Unable to find request');
2561
2601
  const {
@@ -2608,22 +2648,22 @@ class KoniExtension {
2608
2648
 
2609
2649
  /// Derive account
2610
2650
 
2611
- derivationCreateMultiple(_ref61) {
2651
+ derivationCreateMultiple(_ref62) {
2612
2652
  let {
2613
2653
  isAllowed,
2614
2654
  items,
2615
2655
  parentAddress
2616
- } = _ref61;
2656
+ } = _ref62;
2617
2657
  const parentPair = _uiKeyring.keyring.getPair(parentAddress);
2618
2658
  const isEvm = parentPair.type === 'ethereum';
2619
2659
  if (parentPair.isLocked) {
2620
2660
  _uiKeyring.keyring.unlockPair(parentPair.address);
2621
2661
  }
2622
- const createChild = _ref62 => {
2662
+ const createChild = _ref63 => {
2623
2663
  let {
2624
2664
  name,
2625
2665
  suri
2626
- } = _ref62;
2666
+ } = _ref63;
2627
2667
  const meta = {
2628
2668
  name: name,
2629
2669
  parentAddress
@@ -2669,10 +2709,10 @@ class KoniExtension {
2669
2709
  }
2670
2710
  return true;
2671
2711
  }
2672
- derivationCreateV3(_ref63) {
2712
+ derivationCreateV3(_ref64) {
2673
2713
  let {
2674
2714
  address: parentAddress
2675
- } = _ref63;
2715
+ } = _ref64;
2676
2716
  const parentPair = _uiKeyring.keyring.getPair(parentAddress);
2677
2717
  const isEvm = parentPair.type === 'ethereum';
2678
2718
  if (parentPair.isLocked) {
@@ -2704,11 +2744,11 @@ class KoniExtension {
2704
2744
  });
2705
2745
  return true;
2706
2746
  }
2707
- validateDerivePath(_ref64) {
2747
+ validateDerivePath(_ref65) {
2708
2748
  let {
2709
2749
  parentAddress,
2710
2750
  suri
2711
- } = _ref64;
2751
+ } = _ref65;
2712
2752
  const parentPair = _uiKeyring.keyring.getPair(parentAddress);
2713
2753
  const isEvm = parentPair.type === 'ethereum';
2714
2754
  if (parentPair.isLocked) {
@@ -2741,12 +2781,12 @@ class KoniExtension {
2741
2781
  suri: meta.suri
2742
2782
  };
2743
2783
  }
2744
- getListDeriveAccounts(_ref65) {
2784
+ getListDeriveAccounts(_ref66) {
2745
2785
  let {
2746
2786
  limit,
2747
2787
  page,
2748
2788
  parentAddress
2749
- } = _ref65;
2789
+ } = _ref66;
2750
2790
  const parentPair = _uiKeyring.keyring.getPair(parentAddress);
2751
2791
  const isEvm = parentPair.type === 'ethereum';
2752
2792
  if (parentPair.isLocked) {
@@ -2837,10 +2877,10 @@ class KoniExtension {
2837
2877
  getSupportedSmartContractTypes() {
2838
2878
  return this.#koniState.getSupportedSmartContractTypes();
2839
2879
  }
2840
- getTransaction(_ref66) {
2880
+ getTransaction(_ref67) {
2841
2881
  let {
2842
2882
  id
2843
- } = _ref66;
2883
+ } = _ref67;
2844
2884
  const {
2845
2885
  transaction,
2846
2886
  ...transactionResult
@@ -2850,8 +2890,8 @@ class KoniExtension {
2850
2890
  subscribeTransactions(id, port) {
2851
2891
  const cb = (0, _subscriptions.createSubscription)(id, port);
2852
2892
  function convertRs(rs) {
2853
- return Object.fromEntries(Object.entries(rs).map(_ref67 => {
2854
- let [key, value] = _ref67;
2893
+ return Object.fromEntries(Object.entries(rs).map(_ref68 => {
2894
+ let [key, value] = _ref68;
2855
2895
  const {
2856
2896
  transaction,
2857
2897
  ...transactionResult
@@ -2881,10 +2921,10 @@ class KoniExtension {
2881
2921
  });
2882
2922
  return notificationSubject.value;
2883
2923
  }
2884
- async reloadCron(_ref68) {
2924
+ async reloadCron(_ref69) {
2885
2925
  let {
2886
2926
  data
2887
- } = _ref68;
2927
+ } = _ref69;
2888
2928
  if (data === 'nft') {
2889
2929
  return await this.#koniState.reloadNft();
2890
2930
  } else if (data === 'staking') {
@@ -3232,6 +3272,8 @@ class KoniExtension {
3232
3272
  return this.keyringLock();
3233
3273
  case 'pri(keyring.export.mnemonic)':
3234
3274
  return this.keyringExportMnemonic(request);
3275
+ case 'pri(keyring.reset)':
3276
+ return await this.resetWallet(request);
3235
3277
 
3236
3278
  /// Signing external
3237
3279
  case 'pri(signing.approve.passwordV2)':
@@ -1454,5 +1454,17 @@ class KoniState {
1454
1454
  async reloadStaking() {
1455
1455
  return await this.cron.reloadStaking();
1456
1456
  }
1457
+ async resetWallet(resetAll) {
1458
+ this.keyringService.resetWallet(resetAll);
1459
+ this.requestService.resetWallet();
1460
+ this.transactionService.resetWallet();
1461
+ await this.dbService.resetWallet(resetAll);
1462
+ this.accountRefStore.set('refList', []);
1463
+ if (resetAll) {
1464
+ this.settingService.resetWallet();
1465
+ }
1466
+ this.chainService.resetWallet(resetAll);
1467
+ await this.chainService.init();
1468
+ }
1457
1469
  }
1458
1470
  exports.default = KoniState;
@@ -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.0.4-0'
16
+ version: '1.0.4-1'
17
17
  };
18
18
  exports.packageInfo = packageInfo;
@@ -228,7 +228,7 @@ const _CHAIN_ASSET_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-
228
228
  exports._CHAIN_ASSET_SRC = _CHAIN_ASSET_SRC;
229
229
  const _ASSET_REF_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/AssetRef.json`;
230
230
  exports._ASSET_REF_SRC = _ASSET_REF_SRC;
231
- const _MULTI_CHAIN_ASSET_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/AssetRef.json`;
231
+ const _MULTI_CHAIN_ASSET_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/MultiChainAsset.json`;
232
232
  exports._MULTI_CHAIN_ASSET_SRC = _MULTI_CHAIN_ASSET_SRC;
233
233
  const _CHAIN_LOGO_MAP_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainLogoMap.json`;
234
234
  exports._CHAIN_LOGO_MAP_SRC = _CHAIN_LOGO_MAP_SRC;
@@ -119,7 +119,7 @@ class SubstrateChainHandler {
119
119
  name = nameResp.output ? nameObj.Ok || nameObj.ok : '';
120
120
  decimals = decimalsResp.output ? new _util.BN(decimalsObj.Ok || decimalsObj.ok).toNumber() : 0;
121
121
  symbol = decimalsResp.output ? symbolObj.Ok || symbolObj.ok : '';
122
- if (name === '' || symbol === '') {
122
+ if (!name || !symbol || typeof name === 'object' || typeof symbol === 'object') {
123
123
  contractError = true;
124
124
  }
125
125
  console.log('validate PSP22', name, symbol, decimals);
@@ -483,31 +483,43 @@ class ChainService {
483
483
  return duplicatedSlug;
484
484
  }
485
485
  async fetchLatestData(src, defaultValue) {
486
- try {
487
- const timeout = await new Promise(resolve => {
488
- const id = setTimeout(() => {
489
- clearTimeout(id);
490
- resolve(null);
491
- }, 1000);
492
- });
493
- let result = defaultValue;
494
- const resp = (await Promise.race([timeout, fetch(src)])) || null;
495
- if (!resp) {
496
- return result;
497
- }
498
- if (resp.ok) {
499
- try {
500
- result = await resp.json();
501
- } catch (err) {
502
- console.warn('Error parsing latest data', src, err);
503
- }
504
- }
505
- return result;
506
- } catch (e) {
507
- console.warn('Error fetching latest data', src, e);
508
- return defaultValue;
509
- }
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
+ // }
510
521
  }
522
+
511
523
  async initChains() {
512
524
  const storedChainSettings = await this.dbService.getAllChainStore();
513
525
  const latestChainInfoMap = await this.fetchLatestData(_constants._CHAIN_INFO_SRC, _chainList.ChainInfoMap);
@@ -1198,13 +1210,12 @@ class ChainService {
1198
1210
  }
1199
1211
  return this.assetSettingSubject.value;
1200
1212
  }
1201
- async updateAssetSetting(assetSlug, assetSetting) {
1213
+ async updateAssetSetting(assetSlug, assetSetting, autoEnableNativeToken) {
1202
1214
  const currentAssetSettings = await this.getAssetSettings();
1203
1215
  let needUpdateSubject;
1204
1216
 
1205
1217
  // Update settings
1206
1218
  currentAssetSettings[assetSlug] = assetSetting;
1207
- this.setAssetSettings(currentAssetSettings);
1208
1219
  if (assetSetting.visible) {
1209
1220
  const assetInfo = this.getAssetBySlug(assetSlug);
1210
1221
  const chainState = this.getChainStateByKey(assetInfo.originChain);
@@ -1213,8 +1224,15 @@ class ChainService {
1213
1224
  if (chainState && !chainState.active) {
1214
1225
  this.enableChain(chainState.slug);
1215
1226
  needUpdateSubject = true;
1227
+ if (autoEnableNativeToken) {
1228
+ const nativeAsset = this.getNativeTokenInfo(assetInfo.originChain);
1229
+ currentAssetSettings[nativeAsset.slug] = {
1230
+ visible: true
1231
+ };
1232
+ }
1216
1233
  }
1217
1234
  }
1235
+ this.setAssetSettings(currentAssetSettings);
1218
1236
  return needUpdateSubject;
1219
1237
  }
1220
1238
  async updateAssetSettingByChain(chainSlug, visible) {
@@ -1237,5 +1255,36 @@ class ChainService {
1237
1255
  async getAssetLogoMap() {
1238
1256
  return await this.fetchLatestData(_constants._ASSET_LOGO_MAP_SRC, _chainList.AssetLogoMap);
1239
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
+ }
1288
+ }
1240
1289
  }
1241
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
  }