@subwallet/extension-base 1.1.6-0 → 1.1.6-2

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 (51) hide show
  1. package/background/KoniTypes.d.ts +2 -0
  2. package/cjs/koni/api/nft/config.js +1 -1
  3. package/cjs/koni/api/staking/bonding/amplitude.js +18 -17
  4. package/cjs/koni/api/staking/bonding/paraChain.js +11 -17
  5. package/cjs/koni/background/handlers/Extension.js +16 -3
  6. package/cjs/koni/background/handlers/Tabs.js +1 -5
  7. package/cjs/packageInfo.js +1 -1
  8. package/cjs/page/SubWalleEvmProvider.js +18 -7
  9. package/cjs/services/chain-service/constants.js +5 -3
  10. package/cjs/services/chain-service/handler/AbstractChainHandler.js +25 -11
  11. package/cjs/services/chain-service/handler/EvmApi.js +15 -5
  12. package/cjs/services/chain-service/handler/EvmChainHandler.js +2 -2
  13. package/cjs/services/chain-service/handler/SubstrateApi.js +36 -17
  14. package/cjs/services/chain-service/handler/SubstrateChainHandler.js +5 -5
  15. package/cjs/services/chain-service/index.js +12 -6
  16. package/cjs/services/migration-service/scripts/MigrateWalletReference.js +31 -0
  17. package/cjs/services/migration-service/scripts/index.js +3 -1
  18. package/cjs/services/setting-service/constants.js +2 -1
  19. package/cjs/services/storage-service/db-stores/Nft.js +2 -2
  20. package/cjs/services/storage-service/db-stores/Staking.js +2 -2
  21. package/koni/api/nft/config.d.ts +1 -1
  22. package/koni/api/nft/config.js +1 -1
  23. package/koni/api/staking/bonding/amplitude.js +18 -17
  24. package/koni/api/staking/bonding/paraChain.js +11 -17
  25. package/koni/api/staking/bonding/utils.d.ts +3 -3
  26. package/koni/background/handlers/Extension.d.ts +1 -0
  27. package/koni/background/handlers/Extension.js +16 -3
  28. package/koni/background/handlers/Tabs.js +1 -5
  29. package/package.json +12 -6
  30. package/packageInfo.js +1 -1
  31. package/page/SubWalleEvmProvider.d.ts +2 -1
  32. package/page/SubWalleEvmProvider.js +18 -7
  33. package/services/chain-service/constants.js +5 -3
  34. package/services/chain-service/handler/AbstractChainHandler.d.ts +5 -5
  35. package/services/chain-service/handler/AbstractChainHandler.js +24 -9
  36. package/services/chain-service/handler/EvmApi.d.ts +4 -2
  37. package/services/chain-service/handler/EvmApi.js +15 -5
  38. package/services/chain-service/handler/EvmChainHandler.js +2 -2
  39. package/services/chain-service/handler/SubstrateApi.d.ts +5 -2
  40. package/services/chain-service/handler/SubstrateApi.js +36 -17
  41. package/services/chain-service/handler/SubstrateChainHandler.js +6 -6
  42. package/services/chain-service/handler/types.d.ts +2 -1
  43. package/services/chain-service/index.d.ts +1 -0
  44. package/services/chain-service/index.js +12 -6
  45. package/services/chain-service/types.d.ts +1 -0
  46. package/services/migration-service/scripts/MigrateWalletReference.d.ts +4 -0
  47. package/services/migration-service/scripts/MigrateWalletReference.js +23 -0
  48. package/services/migration-service/scripts/index.js +3 -1
  49. package/services/setting-service/constants.js +2 -1
  50. package/services/storage-service/db-stores/Nft.js +2 -2
  51. package/services/storage-service/db-stores/Staking.js +2 -2
@@ -1,7 +1,7 @@
1
1
  /// <reference types="node" />
2
2
  import '@polkadot/types-augment';
3
3
  import { _ApiOptions } from '@subwallet/extension-base/services/chain-service/handler/types';
4
- import { _EvmApi } from '@subwallet/extension-base/services/chain-service/types';
4
+ import { _ChainConnectionStatus, _EvmApi } from '@subwallet/extension-base/services/chain-service/types';
5
5
  import { PromiseHandler } from '@subwallet/extension-base/utils/promise';
6
6
  import { BehaviorSubject } from 'rxjs';
7
7
  import Web3 from 'web3';
@@ -14,13 +14,15 @@ export declare class EvmApi implements _EvmApi {
14
14
  apiError?: string;
15
15
  apiRetry: number;
16
16
  readonly isApiConnectedSubject: BehaviorSubject<boolean>;
17
+ readonly connectionStatusSubject: BehaviorSubject<_ChainConnectionStatus>;
17
18
  isApiReady: boolean;
18
19
  isApiReadyOnce: boolean;
19
20
  isReadyHandler: PromiseHandler<_EvmApi>;
20
21
  intervalCheckApi: NodeJS.Timer;
21
22
  providerName: string;
22
23
  get isApiConnected(): boolean;
23
- private updateConnectedStatus;
24
+ get connectionStatus(): _ChainConnectionStatus;
25
+ private updateConnectionStatus;
24
26
  get isReady(): Promise<_EvmApi>;
25
27
  updateApiUrl(apiUrl: string): Promise<void>;
26
28
  recoverConnect(): Promise<void>;
@@ -2,21 +2,30 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import '@polkadot/types-augment';
5
+ import { _ChainConnectionStatus } from '@subwallet/extension-base/services/chain-service/types';
5
6
  import { createPromiseHandler } from '@subwallet/extension-base/utils/promise';
6
7
  import { BehaviorSubject } from 'rxjs';
7
8
  import Web3 from 'web3';
8
9
  export class EvmApi {
9
10
  apiRetry = 0;
10
11
  isApiConnectedSubject = new BehaviorSubject(false);
12
+ connectionStatusSubject = new BehaviorSubject(_ChainConnectionStatus.DISCONNECTED);
11
13
  isApiReady = false;
12
14
  isApiReadyOnce = false;
13
15
  get isApiConnected() {
14
16
  return this.isApiConnectedSubject.getValue();
15
17
  }
16
- updateConnectedStatus(isConnected) {
18
+ get connectionStatus() {
19
+ return this.connectionStatusSubject.getValue();
20
+ }
21
+ updateConnectionStatus(status) {
22
+ const isConnected = status === _ChainConnectionStatus.CONNECTED;
17
23
  if (isConnected !== this.isApiConnectedSubject.value) {
18
24
  this.isApiConnectedSubject.next(isConnected);
19
25
  }
26
+ if (status !== this.connectionStatusSubject.value) {
27
+ this.connectionStatusSubject.next(status);
28
+ }
20
29
  }
21
30
  get isReady() {
22
31
  return this.isReadyHandler.promise;
@@ -72,6 +81,7 @@ export class EvmApi {
72
81
  // For websocket provider, connect it
73
82
  const wsProvider = this.provider;
74
83
  wsProvider.connect && wsProvider.connect();
84
+ this.updateConnectionStatus(_ChainConnectionStatus.CONNECTING);
75
85
  // Check if api is ready
76
86
  this.api.eth.net.isListening().then(() => {
77
87
  this.isApiReadyOnce = true;
@@ -80,7 +90,7 @@ export class EvmApi {
80
90
  this.isApiReadyOnce = false;
81
91
  this.isApiReady = false;
82
92
  this.isReadyHandler.reject(error);
83
- this.updateConnectedStatus(false);
93
+ this.updateConnectionStatus(_ChainConnectionStatus.DISCONNECTED);
84
94
  console.warn(`Can not connect to ${this.chainSlug} (EVM) at ${this.apiUrl}`);
85
95
  });
86
96
 
@@ -94,7 +104,7 @@ export class EvmApi {
94
104
  // For websocket provider, disconnect it
95
105
  const wsProvider = this.provider;
96
106
  wsProvider.disconnect && wsProvider.disconnect();
97
- this.updateConnectedStatus(false);
107
+ this.updateConnectionStatus(_ChainConnectionStatus.DISCONNECTED);
98
108
  return Promise.resolve();
99
109
  }
100
110
  destroy() {
@@ -109,10 +119,10 @@ export class EvmApi {
109
119
  this.isReadyHandler.resolve(this);
110
120
  }
111
121
  }
112
- this.updateConnectedStatus(true);
122
+ this.updateConnectionStatus(_ChainConnectionStatus.CONNECTED);
113
123
  }
114
124
  onDisconnect() {
115
- this.updateConnectedStatus(false);
125
+ this.updateConnectionStatus(_ChainConnectionStatus.DISCONNECTED);
116
126
  if (this.isApiConnected) {
117
127
  console.warn(`Disconnected from ${this.chainSlug} of ${this.apiUrl} (EVM)`);
118
128
  this.isApiReady = false;
@@ -39,8 +39,8 @@ export class EvmChainHandler extends AbstractChainHandler {
39
39
  const apiObject = new EvmApi(chainSlug, apiUrl, {
40
40
  providerName
41
41
  });
42
- apiObject.isApiConnectedSubject.subscribe(this.handleConnect.bind(this, chainSlug));
43
- apiObject.isApiConnectedSubject.subscribe(onUpdateStatus);
42
+ apiObject.connectionStatusSubject.subscribe(this.handleConnection.bind(this, chainSlug));
43
+ apiObject.connectionStatusSubject.subscribe(onUpdateStatus);
44
44
  return Promise.resolve(apiObject);
45
45
  }
46
46
  async recoverApi(chainSlug) {
@@ -1,7 +1,7 @@
1
1
  import '@polkadot/types-augment';
2
2
  import { MetadataItem } from '@subwallet/extension-base/background/KoniTypes';
3
3
  import { _ApiOptions } from '@subwallet/extension-base/services/chain-service/handler/types';
4
- import { _SubstrateApi, _SubstrateDefaultFormatBalance } from '@subwallet/extension-base/services/chain-service/types';
4
+ import { _ChainConnectionStatus, _SubstrateApi, _SubstrateDefaultFormatBalance } from '@subwallet/extension-base/services/chain-service/types';
5
5
  import { BehaviorSubject } from 'rxjs';
6
6
  import { ApiPromise } from '@polkadot/api';
7
7
  import { SubmittableExtrinsicFunction } from '@polkadot/api/promise/types';
@@ -20,8 +20,11 @@ export declare class SubstrateApi implements _SubstrateApi {
20
20
  apiError?: string;
21
21
  private handleApiReady;
22
22
  readonly isApiConnectedSubject: BehaviorSubject<boolean>;
23
+ readonly connectionStatusSubject: BehaviorSubject<_ChainConnectionStatus>;
23
24
  get isApiConnected(): boolean;
24
- private updateConnectedStatus;
25
+ substrateRetry: number;
26
+ get connectionStatus(): _ChainConnectionStatus;
27
+ private updateConnectionStatus;
25
28
  apiDefaultTx?: SubmittableExtrinsicFunction;
26
29
  apiDefaultTxSudo?: SubmittableExtrinsicFunction;
27
30
  defaultFormatBalance?: _SubstrateDefaultFormatBalance;
@@ -7,6 +7,7 @@ import { rpc as oakRpc, types as oakTypes } from '@oak-foundation/types';
7
7
  import { _API_OPTIONS_CHAIN_GROUP, API_AUTO_CONNECT_MS, API_CONNECT_TIMEOUT } from '@subwallet/extension-base/services/chain-service/constants';
8
8
  import { getSubstrateConnectProvider } from '@subwallet/extension-base/services/chain-service/handler/light-client';
9
9
  import { DEFAULT_AUX } from '@subwallet/extension-base/services/chain-service/handler/SubstrateChainHandler';
10
+ import { _ChainConnectionStatus } from '@subwallet/extension-base/services/chain-service/types';
10
11
  import { createPromiseHandler } from '@subwallet/extension-base/utils/promise';
11
12
  import { spec as availSpec } from 'avail-js-sdk';
12
13
  import { BehaviorSubject } from 'rxjs';
@@ -20,13 +21,22 @@ export class SubstrateApi {
20
21
  isApiReady = false;
21
22
  isApiReadyOnce = false;
22
23
  isApiConnectedSubject = new BehaviorSubject(false);
24
+ connectionStatusSubject = new BehaviorSubject(_ChainConnectionStatus.DISCONNECTED);
23
25
  get isApiConnected() {
24
26
  return this.isApiConnectedSubject.getValue();
25
27
  }
26
- updateConnectedStatus(isConnected) {
28
+ substrateRetry = 0;
29
+ get connectionStatus() {
30
+ return this.connectionStatusSubject.getValue();
31
+ }
32
+ updateConnectionStatus(status) {
33
+ const isConnected = status === _ChainConnectionStatus.CONNECTED;
27
34
  if (isConnected !== this.isApiConnectedSubject.value) {
28
35
  this.isApiConnectedSubject.next(isConnected);
29
36
  }
37
+ if (status !== this.connectionStatusSubject.value) {
38
+ this.connectionStatusSubject.next(status);
39
+ }
30
40
  }
31
41
  specName = '';
32
42
  specVersion = '';
@@ -54,12 +64,14 @@ export class SubstrateApi {
54
64
  [`${metadata.genesisHash}-${metadata.specVersion}`]: metadata.hexValue
55
65
  };
56
66
  }
67
+ this.updateConnectionStatus(_ChainConnectionStatus.CONNECTING);
68
+ let api;
57
69
  if (_API_OPTIONS_CHAIN_GROUP.acala.includes(this.chainSlug)) {
58
- return new ApiPromise(acalaOptions({
70
+ api = new ApiPromise(acalaOptions({
59
71
  provider
60
72
  }));
61
73
  } else if (_API_OPTIONS_CHAIN_GROUP.turing.includes(this.chainSlug)) {
62
- return new ApiPromise({
74
+ api = new ApiPromise({
63
75
  provider,
64
76
  rpc: oakRpc,
65
77
  types: oakTypes
@@ -72,8 +84,13 @@ export class SubstrateApi {
72
84
  signedExtensions: availSpec.signedExtensions
73
85
  });
74
86
  } else {
75
- return new ApiPromise(apiOption);
87
+ api = new ApiPromise(apiOption);
76
88
  }
89
+ api.on('ready', this.onReady.bind(this));
90
+ api.on('connected', this.onConnect.bind(this));
91
+ api.on('disconnected', this.onDisconnect.bind(this));
92
+ api.on('error', this.onError.bind(this));
93
+ return api;
77
94
  }
78
95
  constructor(chainSlug, apiUrl, {
79
96
  externalApiPromise,
@@ -88,10 +105,6 @@ export class SubstrateApi {
88
105
  this.provider = this.createProvider(apiUrl);
89
106
  this.api = externalApiPromise || this.createApi(this.provider);
90
107
  this.handleApiReady = createPromiseHandler();
91
- this.api.on('ready', this.onReady.bind(this));
92
- this.api.on('connected', this.onConnect.bind(this));
93
- this.api.on('disconnected', this.onDisconnect.bind(this));
94
- this.api.on('error', this.onError.bind(this));
95
108
  }
96
109
  get isReady() {
97
110
  return this.handleApiReady.promise;
@@ -113,17 +126,16 @@ export class SubstrateApi {
113
126
  this.apiUrl = apiUrl;
114
127
  this.provider = this.createProvider(apiUrl);
115
128
  this.api = this.createApi(this.provider);
116
- this.api.on('ready', this.onReady.bind(this));
117
- this.api.on('connected', this.onConnect.bind(this));
118
- this.api.on('disconnected', this.onDisconnect.bind(this));
119
- this.api.on('error', this.onError.bind(this));
120
129
  }
121
130
  connect() {
122
131
  if (this.api.isConnected) {
123
- this.updateConnectedStatus(true);
132
+ this.updateConnectionStatus(_ChainConnectionStatus.CONNECTED);
124
133
  } else {
134
+ this.updateConnectionStatus(_ChainConnectionStatus.CONNECTING);
125
135
  this.api.connect().then(() => {
126
- this.updateConnectedStatus(true);
136
+ this.api.isReady.then(() => {
137
+ this.updateConnectionStatus(_ChainConnectionStatus.CONNECTED);
138
+ }).catch(console.error);
127
139
  }).catch(console.error);
128
140
  }
129
141
  }
@@ -133,7 +145,7 @@ export class SubstrateApi {
133
145
  } catch (e) {
134
146
  console.error(e);
135
147
  }
136
- this.updateConnectedStatus(false);
148
+ this.updateConnectionStatus(_ChainConnectionStatus.DISCONNECTED);
137
149
  }
138
150
  async recoverConnect() {
139
151
  await this.disconnect();
@@ -155,7 +167,8 @@ export class SubstrateApi {
155
167
  });
156
168
  }
157
169
  onConnect() {
158
- this.updateConnectedStatus(true);
170
+ this.updateConnectionStatus(_ChainConnectionStatus.CONNECTED);
171
+ this.substrateRetry = 0;
159
172
  console.log(`Connected to ${this.chainSlug || ''} at ${this.apiUrl}`);
160
173
  if (this.isApiReadyOnce) {
161
174
  this.handleApiReady.resolve(this);
@@ -164,8 +177,14 @@ export class SubstrateApi {
164
177
  onDisconnect() {
165
178
  this.isApiReady = false;
166
179
  console.log(`Disconnected from ${this.chainSlug} at ${this.apiUrl}`);
167
- this.updateConnectedStatus(false);
180
+ this.updateConnectionStatus(_ChainConnectionStatus.DISCONNECTED);
168
181
  this.handleApiReady = createPromiseHandler();
182
+ this.substrateRetry += 1;
183
+ if (this.substrateRetry > 9) {
184
+ this.disconnect().then(() => {
185
+ this.updateConnectionStatus(_ChainConnectionStatus.UNSTABLE);
186
+ }).catch(console.error);
187
+ }
169
188
  }
170
189
  onError(e) {
171
190
  console.warn(`${this.chainSlug} connection got error`, e);
@@ -3,7 +3,7 @@
3
3
 
4
4
  import { _AssetType } from '@subwallet/chain-list/types';
5
5
  import { getDefaultWeightV2 } from '@subwallet/extension-base/koni/api/tokens/wasm/utils';
6
- import { AbstractChainHandler, SHORT_RETRY_TIME } from '@subwallet/extension-base/services/chain-service/handler/AbstractChainHandler';
6
+ import { AbstractChainHandler } from '@subwallet/extension-base/services/chain-service/handler/AbstractChainHandler';
7
7
  import { SubstrateApi } from '@subwallet/extension-base/services/chain-service/handler/SubstrateApi';
8
8
  import { ContractPromise } from '@polkadot/api-contract';
9
9
  import { BN } from '@polkadot/util';
@@ -34,12 +34,12 @@ export class SubstrateChainHandler extends AbstractChainHandler {
34
34
 
35
35
  // Not found substrateInterface mean it active with evm interface
36
36
  if (api) {
37
- api === null || api === void 0 ? void 0 : api.connect();
37
+ api.connect();
38
38
  if (!api.useLightClient) {
39
39
  // Manual fire handle connect to avoid some chain can not reconnect
40
40
  setTimeout(() => {
41
- this.handleConnect(chain, api.isApiConnected);
42
- }, SHORT_RETRY_TIME);
41
+ this.handleConnection(chain, api.connectionStatus);
42
+ }, 10000);
43
43
  }
44
44
  }
45
45
  }
@@ -194,8 +194,8 @@ export class SubstrateChainHandler extends AbstractChainHandler {
194
194
  metadata,
195
195
  externalApiPromise
196
196
  });
197
- apiObject.isApiConnectedSubject.subscribe(this.handleConnect.bind(this, chainSlug));
198
- onUpdateStatus && apiObject.isApiConnectedSubject.subscribe(onUpdateStatus);
197
+ apiObject.connectionStatusSubject.subscribe(this.handleConnection.bind(this, chainSlug));
198
+ onUpdateStatus && apiObject.connectionStatusSubject.subscribe(onUpdateStatus);
199
199
 
200
200
  // Update metadata to database with async methods
201
201
  apiObject.isReady.then(api => {
@@ -1,4 +1,5 @@
1
1
  import { MetadataItem } from '@subwallet/extension-base/background/KoniTypes';
2
+ import { _ChainConnectionStatus } from '@subwallet/extension-base/services/chain-service/types';
2
3
  import { ApiPromise } from '@polkadot/api';
3
4
  export interface _EvmChainSpec {
4
5
  evmChainId: number;
@@ -19,7 +20,7 @@ export interface _SubstrateChainSpec {
19
20
  export interface _ApiOptions {
20
21
  providerName?: string;
21
22
  metadata?: MetadataItem;
22
- onUpdateStatus?: (isConnected: boolean) => void;
23
+ onUpdateStatus?: (status: _ChainConnectionStatus) => void;
23
24
  externalApiPromise?: ApiPromise;
24
25
  }
25
26
  export declare enum _CHAIN_VALIDATION_ERROR {
@@ -73,6 +73,7 @@ export declare class ChainService {
73
73
  private destroyApiForChain;
74
74
  enableChain(chainSlug: string): Promise<boolean>;
75
75
  enableChains(chainSlugs: string[]): Promise<boolean>;
76
+ reconnectChain(chain: string): Promise<boolean>;
76
77
  disableChain(chainSlug: string): boolean;
77
78
  private checkExistedPredefinedChain;
78
79
  private fetchLatestData;
@@ -381,7 +381,7 @@ export class ChainService {
381
381
  this.dataMap.assetRefMap = latestAssetRefMap;
382
382
  await this.initChains();
383
383
  this.chainInfoMapSubject.next(this.getChainInfoMap());
384
- this.chainStateMapSubject.next(this.getChainStateMap());
384
+ this.updateChainStateMapSubscription();
385
385
  this.assetRegistrySubject.next(this.getAssetRegistry());
386
386
  this.xcmRefMapSubject.next(this.dataMap.assetRefMap);
387
387
  await this.initApis();
@@ -407,14 +407,14 @@ export class ChainService {
407
407
  endpoint,
408
408
  providerName
409
409
  } = this.getChainCurrentProviderByKey(chainInfo.slug);
410
- const onUpdateStatus = isConnected => {
410
+ const onUpdateStatus = status => {
411
411
  const currentStatus = this.getChainStateByKey(chainInfo.slug).connectionStatus;
412
- const newStatus = isConnected ? _ChainConnectionStatus.CONNECTED : _ChainConnectionStatus.DISCONNECTED;
413
412
 
414
413
  // Avoid unnecessary update in case disable chain
415
- if (currentStatus !== newStatus) {
416
- this.setChainConnectionStatus(chainInfo.slug, newStatus);
417
- this.chainStateMapSubject.next(this.getChainStateMap());
414
+ if (currentStatus !== status) {
415
+ console.log(chainInfo.name, currentStatus, status);
416
+ this.setChainConnectionStatus(chainInfo.slug, status);
417
+ this.updateChainStateMapSubscription();
418
418
  }
419
419
  };
420
420
  if (chainInfo.substrateInfo !== null && chainInfo.substrateInfo !== undefined) {
@@ -499,6 +499,12 @@ export class ChainService {
499
499
  needUpdate && this.updateChainStateMapSubscription();
500
500
  return needUpdate;
501
501
  }
502
+ async reconnectChain(chain) {
503
+ var _this$getSubstrateApi, _this$getEvmApi;
504
+ await ((_this$getSubstrateApi = this.getSubstrateApi(chain)) === null || _this$getSubstrateApi === void 0 ? void 0 : _this$getSubstrateApi.recoverConnect());
505
+ await ((_this$getEvmApi = this.getEvmApi(chain)) === null || _this$getEvmApi === void 0 ? void 0 : _this$getEvmApi.recoverConnect());
506
+ return true;
507
+ }
502
508
  disableChain(chainSlug) {
503
509
  const chainInfo = this.getChainInfoByKey(chainSlug);
504
510
  const chainStateMap = this.getChainStateMap();
@@ -38,6 +38,7 @@ export interface _ChainBaseApi {
38
38
  isApiConnectedSubject: BehaviorSubject<boolean>;
39
39
  isApiReadyOnce: boolean;
40
40
  isApiConnected: boolean;
41
+ connectionStatus: _ChainConnectionStatus;
41
42
  updateApiUrl: (apiUrl: string) => Promise<void>;
42
43
  connect: () => void;
43
44
  disconnect: () => Promise<void>;
@@ -0,0 +1,4 @@
1
+ import BaseMigrationJob from '@subwallet/extension-base/services/migration-service/Base';
2
+ export default class MigrateWalletReference extends BaseMigrationJob {
3
+ run(): Promise<void>;
4
+ }
@@ -0,0 +1,23 @@
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
+ import { v4 as uuidv4 } from 'uuid';
6
+ export default class MigrateWalletReference extends BaseMigrationJob {
7
+ async run() {
8
+ try {
9
+ return new Promise(resolve => {
10
+ this.state.settingService.getSettings(currentSettings => {
11
+ const walletReference = uuidv4();
12
+ this.state.settingService.setSettings({
13
+ ...currentSettings,
14
+ walletReference: walletReference
15
+ });
16
+ resolve();
17
+ });
18
+ });
19
+ } catch (e) {
20
+ console.error(e);
21
+ }
22
+ }
23
+ }
@@ -11,6 +11,7 @@ import MigrateLedgerAccount from "./MigrateLedgerAccount.js";
11
11
  import MigrateNetworkSettings from "./MigrateNetworkSettings.js";
12
12
  import MigrateSettings from "./MigrateSettings.js";
13
13
  import MigrateTransactionHistory from "./MigrateTransactionHistory.js";
14
+ import MigrateWalletReference from "./MigrateWalletReference.js";
14
15
  export const EVERYTIME = '__everytime__';
15
16
  export default {
16
17
  '1.0.1-11': MigrateNetworkSettings,
@@ -22,6 +23,7 @@ export default {
22
23
  '1.0.3-01': MigrateAutoLock,
23
24
  '1.0.3-02': MigrateChainPatrol,
24
25
  '1.0.9-01': MigrateLedgerAccount,
25
- '1.0.12-02': MigrateEthProvider
26
+ '1.0.12-02': MigrateEthProvider,
27
+ '1.1.6-01': MigrateWalletReference
26
28
  // [`${EVERYTIME}-1`]: AutoEnableChainsTokens
27
29
  };
@@ -20,5 +20,6 @@ export const DEFAULT_SETTING = {
20
20
  theme: DEFAULT_THEME,
21
21
  camera: DEFAULT_CAMERA_ENABLE,
22
22
  timeAutoLock: DEFAULT_AUTO_LOCK_TIME,
23
- enableChainPatrol: DEFAULT_CHAIN_PATROL_ENABLE
23
+ enableChainPatrol: DEFAULT_CHAIN_PATROL_ENABLE,
24
+ walletReference: ''
24
25
  };
@@ -6,11 +6,11 @@ import { liveQuery } from 'dexie';
6
6
  export default class NftStore extends BaseStoreWithAddressAndChain {
7
7
  getNft(addresses, chainList = []) {
8
8
  if (addresses.length) {
9
- return this.table.where('address').anyOfIgnoreCase(addresses).and(item => !chainList.length || chainList.includes(item.chain)).toArray();
9
+ return this.table.where('address').anyOfIgnoreCase(addresses).and(item => chainList && chainList.includes(item.chain)).toArray();
10
10
  }
11
11
 
12
12
  // return this.table.filter((item) => !chainHashes.length || chainHashes.includes(item.chainHash)).toArray();
13
- return this.table.filter(item => !chainList.length || chainList.includes(item.chain)).toArray();
13
+ return this.table.filter(item => chainList && chainList.includes(item.chain)).toArray();
14
14
  }
15
15
  subscribeNft(addresses, chainList = []) {
16
16
  return liveQuery(() => this.getNft(addresses, chainList));
@@ -10,9 +10,9 @@ export default class StakingStore extends BaseStoreWithAddressAndChain {
10
10
  }
11
11
  getStakings(addresses, chainList = []) {
12
12
  if (addresses.length) {
13
- return this.table.where('address').anyOfIgnoreCase(addresses).and(item => (!chainList.length || chainList.includes(item.chain)) && parseFloat(item.balance) > 0).toArray();
13
+ return this.table.where('address').anyOfIgnoreCase(addresses).and(item => chainList && chainList.includes(item.chain) && parseFloat(item.balance) > 0).toArray();
14
14
  }
15
- return this.table.filter(item => (!chainList.length || chainList.includes(item.chain)) && parseFloat(item.balance) > 0).toArray();
15
+ return this.table.filter(item => chainList && chainList.includes(item.chain) && parseFloat(item.balance) > 0).toArray();
16
16
  }
17
17
  getStakingsByChains(chainList) {
18
18
  return this.table.filter(item => chainList.includes(item.chain) && parseFloat(item.balance) > 0).toArray();