@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.
- package/background/KoniTypes.d.ts +2 -0
- package/cjs/koni/api/nft/config.js +1 -1
- package/cjs/koni/api/staking/bonding/amplitude.js +18 -17
- package/cjs/koni/api/staking/bonding/paraChain.js +11 -17
- package/cjs/koni/background/handlers/Extension.js +16 -3
- package/cjs/koni/background/handlers/Tabs.js +1 -5
- package/cjs/packageInfo.js +1 -1
- package/cjs/page/SubWalleEvmProvider.js +18 -7
- package/cjs/services/chain-service/constants.js +5 -3
- package/cjs/services/chain-service/handler/AbstractChainHandler.js +25 -11
- package/cjs/services/chain-service/handler/EvmApi.js +15 -5
- package/cjs/services/chain-service/handler/EvmChainHandler.js +2 -2
- package/cjs/services/chain-service/handler/SubstrateApi.js +36 -17
- package/cjs/services/chain-service/handler/SubstrateChainHandler.js +5 -5
- package/cjs/services/chain-service/index.js +12 -6
- package/cjs/services/migration-service/scripts/MigrateWalletReference.js +31 -0
- package/cjs/services/migration-service/scripts/index.js +3 -1
- package/cjs/services/setting-service/constants.js +2 -1
- package/cjs/services/storage-service/db-stores/Nft.js +2 -2
- package/cjs/services/storage-service/db-stores/Staking.js +2 -2
- package/koni/api/nft/config.d.ts +1 -1
- package/koni/api/nft/config.js +1 -1
- package/koni/api/staking/bonding/amplitude.js +18 -17
- package/koni/api/staking/bonding/paraChain.js +11 -17
- package/koni/api/staking/bonding/utils.d.ts +3 -3
- package/koni/background/handlers/Extension.d.ts +1 -0
- package/koni/background/handlers/Extension.js +16 -3
- package/koni/background/handlers/Tabs.js +1 -5
- package/package.json +12 -6
- package/packageInfo.js +1 -1
- package/page/SubWalleEvmProvider.d.ts +2 -1
- package/page/SubWalleEvmProvider.js +18 -7
- package/services/chain-service/constants.js +5 -3
- package/services/chain-service/handler/AbstractChainHandler.d.ts +5 -5
- package/services/chain-service/handler/AbstractChainHandler.js +24 -9
- package/services/chain-service/handler/EvmApi.d.ts +4 -2
- package/services/chain-service/handler/EvmApi.js +15 -5
- package/services/chain-service/handler/EvmChainHandler.js +2 -2
- package/services/chain-service/handler/SubstrateApi.d.ts +5 -2
- package/services/chain-service/handler/SubstrateApi.js +36 -17
- package/services/chain-service/handler/SubstrateChainHandler.js +6 -6
- package/services/chain-service/handler/types.d.ts +2 -1
- package/services/chain-service/index.d.ts +1 -0
- package/services/chain-service/index.js +12 -6
- package/services/chain-service/types.d.ts +1 -0
- package/services/migration-service/scripts/MigrateWalletReference.d.ts +4 -0
- package/services/migration-service/scripts/MigrateWalletReference.js +23 -0
- package/services/migration-service/scripts/index.js +3 -1
- package/services/setting-service/constants.js +2 -1
- package/services/storage-service/db-stores/Nft.js +2 -2
- 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
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
122
|
+
this.updateConnectionStatus(_ChainConnectionStatus.CONNECTED);
|
|
113
123
|
}
|
|
114
124
|
onDisconnect() {
|
|
115
|
-
this.
|
|
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.
|
|
43
|
-
apiObject.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
70
|
+
api = new ApiPromise(acalaOptions({
|
|
59
71
|
provider
|
|
60
72
|
}));
|
|
61
73
|
} else if (_API_OPTIONS_CHAIN_GROUP.turing.includes(this.chainSlug)) {
|
|
62
|
-
|
|
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
|
-
|
|
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.
|
|
132
|
+
this.updateConnectionStatus(_ChainConnectionStatus.CONNECTED);
|
|
124
133
|
} else {
|
|
134
|
+
this.updateConnectionStatus(_ChainConnectionStatus.CONNECTING);
|
|
125
135
|
this.api.connect().then(() => {
|
|
126
|
-
this.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|
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.
|
|
42
|
-
},
|
|
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.
|
|
198
|
-
onUpdateStatus && apiObject.
|
|
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?: (
|
|
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.
|
|
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 =
|
|
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 !==
|
|
416
|
-
|
|
417
|
-
this.
|
|
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,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
|
};
|
|
@@ -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 =>
|
|
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 =>
|
|
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 =>
|
|
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 =>
|
|
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();
|