@toruslabs/ethereum-controllers 8.4.4 → 8.4.6
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/dist/ethereumControllers.umd.min.js +1 -1
- package/dist/lib.cjs/Block/PollingBlockTracker.js +24 -14
- package/dist/lib.cjs/Currency/CurrencyController.js +5 -10
- package/dist/lib.cjs/Gas/GasFeeController.js +6 -15
- package/dist/lib.cjs/Network/NetworkController.js +5 -2
- package/dist/lib.cjs/Network/createJsonRpcClient.js +3 -2
- package/dist/lib.cjs/Nfts/NftsController.js +8 -20
- package/dist/lib.cjs/Tokens/TokenRatesController.js +5 -10
- package/dist/lib.cjs/Tokens/TokensController.js +7 -19
- package/dist/lib.cjs/types/Block/PollingBlockTracker.d.ts +5 -2
- package/dist/lib.cjs/types/Currency/CurrencyController.d.ts +5 -4
- package/dist/lib.cjs/types/Gas/GasFeeController.d.ts +4 -4
- package/dist/lib.cjs/types/Network/NetworkController.d.ts +4 -2
- package/dist/lib.cjs/types/Network/createJsonRpcClient.d.ts +2 -2
- package/dist/lib.cjs/types/Nfts/NftsController.d.ts +4 -5
- package/dist/lib.cjs/types/Tokens/TokenRatesController.d.ts +5 -4
- package/dist/lib.cjs/types/Tokens/TokensController.d.ts +4 -5
- package/dist/lib.cjs/types/utils/interfaces.d.ts +1 -1
- package/dist/lib.esm/Block/PollingBlockTracker.js +25 -15
- package/dist/lib.esm/Currency/CurrencyController.js +6 -11
- package/dist/lib.esm/Gas/GasFeeController.js +7 -16
- package/dist/lib.esm/Network/NetworkController.js +5 -2
- package/dist/lib.esm/Network/createJsonRpcClient.js +3 -2
- package/dist/lib.esm/Nfts/NftsController.js +9 -21
- package/dist/lib.esm/Tokens/TokenRatesController.js +6 -11
- package/dist/lib.esm/Tokens/TokensController.js +8 -20
- package/package.json +3 -3
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
2
|
+
import { BaseBlockTracker, PollingManager, timeout } from '@toruslabs/base-controllers';
|
|
2
3
|
import log from 'loglevel';
|
|
3
4
|
|
|
4
5
|
const DEFAULT_POLLING_INTERVAL = 20;
|
|
@@ -7,15 +8,20 @@ const SEC = 1000;
|
|
|
7
8
|
class PollingBlockTracker extends BaseBlockTracker {
|
|
8
9
|
constructor({
|
|
9
10
|
config,
|
|
10
|
-
state = {}
|
|
11
|
+
state = {},
|
|
12
|
+
idleTimeTracker
|
|
11
13
|
}) {
|
|
12
14
|
if (!config.provider) {
|
|
13
15
|
throw new Error("PollingBlockTracker - no provider specified.");
|
|
14
16
|
}
|
|
17
|
+
if (!idleTimeTracker) {
|
|
18
|
+
throw new Error("PollingBlockTracker - no idleTimeTracker specified.");
|
|
19
|
+
}
|
|
15
20
|
super({
|
|
16
21
|
config,
|
|
17
22
|
state
|
|
18
23
|
});
|
|
24
|
+
_defineProperty(this, "pollingManager", void 0);
|
|
19
25
|
const pollingInterval = config.pollingInterval || DEFAULT_POLLING_INTERVAL;
|
|
20
26
|
const retryTimeout = config.retryTimeout || DEFAULT_RETRY_TIMEOUT;
|
|
21
27
|
|
|
@@ -27,6 +33,7 @@ class PollingBlockTracker extends BaseBlockTracker {
|
|
|
27
33
|
setSkipCacheFlag: config.setSkipCacheFlag || false
|
|
28
34
|
};
|
|
29
35
|
this.initialize();
|
|
36
|
+
this.pollingManager = new PollingManager(idleTimeTracker, pollingInterval);
|
|
30
37
|
}
|
|
31
38
|
async checkForLatestBlock() {
|
|
32
39
|
await this._updateLatestBlock();
|
|
@@ -35,23 +42,26 @@ class PollingBlockTracker extends BaseBlockTracker {
|
|
|
35
42
|
|
|
36
43
|
// overrides the BaseBlockTracker._start method.
|
|
37
44
|
_start() {
|
|
38
|
-
this.
|
|
45
|
+
this.pollingManager.start(async () => {
|
|
46
|
+
await this._synchronize().catch(err => {
|
|
47
|
+
this.emit("error", err);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
_end() {
|
|
52
|
+
this.pollingManager.stop();
|
|
39
53
|
}
|
|
40
54
|
async _synchronize() {
|
|
41
|
-
|
|
42
|
-
|
|
55
|
+
try {
|
|
56
|
+
await this._updateLatestBlock();
|
|
57
|
+
} catch (err) {
|
|
58
|
+
const newErr = new Error(`PollingBlockTracker - encountered an error while attempting to update latest block:\n${err.stack}`);
|
|
43
59
|
try {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
const newErr = new Error(`PollingBlockTracker - encountered an error while attempting to update latest block:\n${err.stack}`);
|
|
48
|
-
try {
|
|
49
|
-
this.emit("error", newErr);
|
|
50
|
-
} catch {
|
|
51
|
-
log.error(newErr);
|
|
52
|
-
}
|
|
53
|
-
await timeout(this.config.retryTimeout);
|
|
60
|
+
this.emit("error", newErr);
|
|
61
|
+
} catch {
|
|
62
|
+
log.error(newErr);
|
|
54
63
|
}
|
|
64
|
+
await timeout(this.config.retryTimeout);
|
|
55
65
|
}
|
|
56
66
|
}
|
|
57
67
|
async _updateLatestBlock() {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _objectSpread from '@babel/runtime/helpers/objectSpread2';
|
|
2
2
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
3
|
-
import { BaseCurrencyController,
|
|
3
|
+
import { BaseCurrencyController, PollingManager } from '@toruslabs/base-controllers';
|
|
4
4
|
import { get } from '@toruslabs/http-helpers';
|
|
5
5
|
import log from 'loglevel';
|
|
6
6
|
|
|
@@ -8,13 +8,14 @@ class CurrencyController extends BaseCurrencyController {
|
|
|
8
8
|
constructor({
|
|
9
9
|
config,
|
|
10
10
|
state,
|
|
11
|
+
idleTimeTracker,
|
|
11
12
|
onNetworkChanged
|
|
12
13
|
}) {
|
|
13
14
|
super({
|
|
14
15
|
config,
|
|
15
16
|
state
|
|
16
17
|
});
|
|
17
|
-
_defineProperty(this, "
|
|
18
|
+
_defineProperty(this, "pollingManager", void 0);
|
|
18
19
|
this.defaultState = _objectSpread(_objectSpread({}, this.defaultState), {}, {
|
|
19
20
|
commonDenomination: "USD",
|
|
20
21
|
commonDenominatorPrice: 0
|
|
@@ -27,6 +28,7 @@ class CurrencyController extends BaseCurrencyController {
|
|
|
27
28
|
this.updateConversionRate();
|
|
28
29
|
}
|
|
29
30
|
});
|
|
31
|
+
this.pollingManager = new PollingManager(idleTimeTracker, this.config.pollInterval);
|
|
30
32
|
}
|
|
31
33
|
setCommonDenomination(commonDenomination) {
|
|
32
34
|
this.update({
|
|
@@ -50,15 +52,8 @@ class CurrencyController extends BaseCurrencyController {
|
|
|
50
52
|
* stored at the controller's conversionInterval property. If it is called and such an id already exists, the
|
|
51
53
|
* previous interval is clear and a new one is created.
|
|
52
54
|
*/
|
|
53
|
-
scheduleConversionInterval() {
|
|
54
|
-
|
|
55
|
-
window.clearInterval(this.conversionInterval);
|
|
56
|
-
}
|
|
57
|
-
this.conversionInterval = window.setInterval(() => {
|
|
58
|
-
if (!idleTimeTracker.checkIfIdle()) {
|
|
59
|
-
this.updateConversionRate();
|
|
60
|
-
}
|
|
61
|
-
}, this.config.pollInterval);
|
|
55
|
+
async scheduleConversionInterval() {
|
|
56
|
+
this.pollingManager.start(this.updateConversionRate.bind(this));
|
|
62
57
|
}
|
|
63
58
|
|
|
64
59
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
2
2
|
import { isHexString, addHexPrefix } from '@ethereumjs/util';
|
|
3
|
-
import { BaseController,
|
|
3
|
+
import { BaseController, PollingManager, cloneDeep } from '@toruslabs/base-controllers';
|
|
4
4
|
import log from 'loglevel';
|
|
5
5
|
import { GAS_ESTIMATE_TYPES } from '../utils/constants.js';
|
|
6
6
|
import { fetchGasEstimates, fetchEthGasPriceEstimate, fetchLegacyGasPriceEstimates, fetchGasEstimatesViaEthFeeHistory, calculateTimeEstimate } from './gasUtil.js';
|
|
@@ -14,6 +14,7 @@ class GasFeeController extends BaseController {
|
|
|
14
14
|
constructor({
|
|
15
15
|
config,
|
|
16
16
|
state,
|
|
17
|
+
idleTimeTracker,
|
|
17
18
|
getNetworkIdentifier,
|
|
18
19
|
getProvider,
|
|
19
20
|
fetchGasEstimates: fetchGasEstimates$1 = fetchGasEstimates,
|
|
@@ -32,7 +33,6 @@ class GasFeeController extends BaseController {
|
|
|
32
33
|
_defineProperty(this, "name", "GasFeeController");
|
|
33
34
|
// https://0x.org/docs/introduction/0x-cheat-sheet#swap-api-endpoints
|
|
34
35
|
_defineProperty(this, "API_SUPPORTED_CHAINIDS", new Set(["0x1", "0x5", "0xa4b1", "0xa86a", "0x2105", "0x38", "0xfa", "0xa", "0x89"]));
|
|
35
|
-
_defineProperty(this, "intervalId", void 0);
|
|
36
36
|
_defineProperty(this, "provider", void 0);
|
|
37
37
|
_defineProperty(this, "currentChainId", void 0);
|
|
38
38
|
_defineProperty(this, "getNetworkIdentifier", void 0);
|
|
@@ -44,6 +44,7 @@ class GasFeeController extends BaseController {
|
|
|
44
44
|
_defineProperty(this, "getCurrentNetworkEIP1559Compatibility", void 0);
|
|
45
45
|
_defineProperty(this, "getCurrentAccountEIP1559Compatibility", void 0);
|
|
46
46
|
_defineProperty(this, "getCurrentNetworkLegacyGasAPICompatibility", void 0);
|
|
47
|
+
_defineProperty(this, "pollingManager", void 0);
|
|
47
48
|
this.getNetworkIdentifier = getNetworkIdentifier;
|
|
48
49
|
this.getProvider = getProvider;
|
|
49
50
|
this.fetchGasEstimates = fetchGasEstimates$1;
|
|
@@ -70,6 +71,7 @@ class GasFeeController extends BaseController {
|
|
|
70
71
|
onNetworkStateChange(() => {
|
|
71
72
|
this.onNetworkStateChange();
|
|
72
73
|
});
|
|
74
|
+
this.pollingManager = new PollingManager(idleTimeTracker, this.config.interval);
|
|
73
75
|
}
|
|
74
76
|
async onNetworkStateChange() {
|
|
75
77
|
this.provider = this.getProvider();
|
|
@@ -103,9 +105,6 @@ class GasFeeController extends BaseController {
|
|
|
103
105
|
this.stopPolling();
|
|
104
106
|
}
|
|
105
107
|
stopPolling() {
|
|
106
|
-
if (this.intervalId) {
|
|
107
|
-
clearInterval(this.intervalId);
|
|
108
|
-
}
|
|
109
108
|
this.resetState();
|
|
110
109
|
}
|
|
111
110
|
|
|
@@ -179,17 +178,9 @@ class GasFeeController extends BaseController {
|
|
|
179
178
|
return newState;
|
|
180
179
|
}
|
|
181
180
|
async _startPolling() {
|
|
182
|
-
this.
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
if (this.intervalId) {
|
|
186
|
-
window.clearInterval(this.intervalId);
|
|
187
|
-
}
|
|
188
|
-
this.intervalId = window.setInterval(async () => {
|
|
189
|
-
if (!idleTimeTracker.checkIfIdle()) {
|
|
190
|
-
await this._fetchGasFeeEstimateData();
|
|
191
|
-
}
|
|
192
|
-
}, this.config.interval);
|
|
181
|
+
this.pollingManager.start(async () => {
|
|
182
|
+
await this._fetchGasFeeEstimateData();
|
|
183
|
+
});
|
|
193
184
|
}
|
|
194
185
|
resetState() {
|
|
195
186
|
this.update(cloneDeep(this.defaultState));
|
|
@@ -13,7 +13,8 @@ const _excluded = ["chainId", "rpcTarget"];
|
|
|
13
13
|
class NetworkController extends BaseController {
|
|
14
14
|
constructor({
|
|
15
15
|
config,
|
|
16
|
-
state
|
|
16
|
+
state,
|
|
17
|
+
idleTimeTracker
|
|
17
18
|
}) {
|
|
18
19
|
super({
|
|
19
20
|
config,
|
|
@@ -26,6 +27,7 @@ class NetworkController extends BaseController {
|
|
|
26
27
|
_defineProperty(this, "provider", null);
|
|
27
28
|
_defineProperty(this, "blockTracker", null);
|
|
28
29
|
_defineProperty(this, "baseProviderHandlers", void 0);
|
|
30
|
+
_defineProperty(this, "idleTimeTracker", void 0);
|
|
29
31
|
this.defaultState = {
|
|
30
32
|
chainId: "loading",
|
|
31
33
|
properties: {
|
|
@@ -39,6 +41,7 @@ class NetworkController extends BaseController {
|
|
|
39
41
|
// then when connection succeeds,
|
|
40
42
|
// we update the network
|
|
41
43
|
this.initialize();
|
|
44
|
+
this.idleTimeTracker = idleTimeTracker;
|
|
42
45
|
}
|
|
43
46
|
getNetworkIdentifier() {
|
|
44
47
|
return this.state.chainId;
|
|
@@ -182,7 +185,7 @@ class NetworkController extends BaseController {
|
|
|
182
185
|
this.blockTracker = blockTracker;
|
|
183
186
|
}
|
|
184
187
|
configureStandardProvider(providerConfig) {
|
|
185
|
-
const networkClient = createJsonRpcClient(providerConfig, this.config);
|
|
188
|
+
const networkClient = createJsonRpcClient(providerConfig, this.config, this.idleTimeTracker);
|
|
186
189
|
log.info("networkClient", networkClient);
|
|
187
190
|
this.setNetworkClient(networkClient);
|
|
188
191
|
}
|
|
@@ -27,7 +27,7 @@ function createProviderConfigMiddleware(providerConfig) {
|
|
|
27
27
|
return next();
|
|
28
28
|
};
|
|
29
29
|
}
|
|
30
|
-
function createJsonRpcClient(providerConfig, networkConfig) {
|
|
30
|
+
function createJsonRpcClient(providerConfig, networkConfig, idleTimeTracker) {
|
|
31
31
|
const {
|
|
32
32
|
chainId,
|
|
33
33
|
rpcTarget
|
|
@@ -40,7 +40,8 @@ function createJsonRpcClient(providerConfig, networkConfig) {
|
|
|
40
40
|
config: _objectSpread(_objectSpread({}, networkConfig), {}, {
|
|
41
41
|
provider: blockProvider
|
|
42
42
|
}),
|
|
43
|
-
state: {}
|
|
43
|
+
state: {},
|
|
44
|
+
idleTimeTracker
|
|
44
45
|
});
|
|
45
46
|
const networkMiddleware = mergeMiddleware([createChainIdMiddleware(chainId), createProviderConfigMiddleware(providerConfig),
|
|
46
47
|
// No need for the following middlewares for web because all browser sessions are quite short lived and each session is limited to scope of a window/tab
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _objectSpread from '@babel/runtime/helpers/objectSpread2';
|
|
2
2
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
3
|
-
import { BaseController,
|
|
3
|
+
import { BaseController, PollingManager } from '@toruslabs/base-controllers';
|
|
4
4
|
import deepmerge from 'deepmerge';
|
|
5
5
|
import { BrowserProvider } from 'ethers';
|
|
6
6
|
import log from 'loglevel';
|
|
@@ -16,7 +16,8 @@ class NftsController extends BaseController {
|
|
|
16
16
|
getCustomNfts,
|
|
17
17
|
getSimpleHashNfts,
|
|
18
18
|
onPreferencesStateChange,
|
|
19
|
-
onNetworkStateChange
|
|
19
|
+
onNetworkStateChange,
|
|
20
|
+
idleTimeTracker
|
|
20
21
|
}) {
|
|
21
22
|
super({
|
|
22
23
|
config,
|
|
@@ -25,9 +26,9 @@ class NftsController extends BaseController {
|
|
|
25
26
|
_defineProperty(this, "name", "NftsController");
|
|
26
27
|
_defineProperty(this, "provider", void 0);
|
|
27
28
|
_defineProperty(this, "ethersProvider", void 0);
|
|
28
|
-
_defineProperty(this, "_timer", void 0);
|
|
29
29
|
_defineProperty(this, "getCustomNfts", void 0);
|
|
30
30
|
_defineProperty(this, "getSimpleHashNfts", void 0);
|
|
31
|
+
_defineProperty(this, "pollingManager", void 0);
|
|
31
32
|
this.provider = provider;
|
|
32
33
|
this.ethersProvider = new BrowserProvider(this.provider, "any");
|
|
33
34
|
this.getCustomNfts = getCustomNfts;
|
|
@@ -60,6 +61,7 @@ class NftsController extends BaseController {
|
|
|
60
61
|
this.restartNftDetection();
|
|
61
62
|
}
|
|
62
63
|
});
|
|
64
|
+
this.pollingManager = new PollingManager(idleTimeTracker, this.config.interval);
|
|
63
65
|
}
|
|
64
66
|
get userSelectedAddress() {
|
|
65
67
|
return this.config.selectedAddress;
|
|
@@ -69,21 +71,6 @@ class NftsController extends BaseController {
|
|
|
69
71
|
if (!this.userSelectedAddress) return [];
|
|
70
72
|
return (_this$state$nfts$this = this.state.nfts[this.userSelectedAddress]) !== null && _this$state$nfts$this !== void 0 ? _this$state$nfts$this : [];
|
|
71
73
|
}
|
|
72
|
-
get interval() {
|
|
73
|
-
return this.config.interval;
|
|
74
|
-
}
|
|
75
|
-
set interval(interval) {
|
|
76
|
-
if (this._timer) window.clearInterval(this._timer);
|
|
77
|
-
if (!interval) {
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
this._timer = window.setInterval(() => {
|
|
81
|
-
if (!idleTimeTracker.checkIfIdle()) {
|
|
82
|
-
this.detectNewNfts();
|
|
83
|
-
this.refreshNftBalances();
|
|
84
|
-
}
|
|
85
|
-
}, interval);
|
|
86
|
-
}
|
|
87
74
|
startNftDetection(selectedAddress) {
|
|
88
75
|
this.configure({
|
|
89
76
|
selectedAddress
|
|
@@ -100,9 +87,10 @@ class NftsController extends BaseController {
|
|
|
100
87
|
if (!this.userSelectedAddress) {
|
|
101
88
|
return;
|
|
102
89
|
}
|
|
103
|
-
this.
|
|
104
|
-
|
|
105
|
-
|
|
90
|
+
this.pollingManager.start(() => {
|
|
91
|
+
this.detectNewNfts();
|
|
92
|
+
this.refreshNftBalances();
|
|
93
|
+
});
|
|
106
94
|
}
|
|
107
95
|
detectNewNfts() {
|
|
108
96
|
const userAddress = this.userSelectedAddress;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _objectSpread from '@babel/runtime/helpers/objectSpread2';
|
|
2
2
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
3
|
-
import { BaseController,
|
|
3
|
+
import { BaseController, PollingManager } from '@toruslabs/base-controllers';
|
|
4
4
|
import { get } from '@toruslabs/http-helpers';
|
|
5
5
|
import log from 'loglevel';
|
|
6
6
|
import { COINGECKO_PLATFORMS_CHAIN_CODE_MAP, COINGECKO_SUPPORTED_CURRENCIES } from '../utils/constants.js';
|
|
@@ -13,6 +13,7 @@ class TokenRatesController extends BaseController {
|
|
|
13
13
|
constructor({
|
|
14
14
|
config,
|
|
15
15
|
state,
|
|
16
|
+
idleTimeTracker,
|
|
16
17
|
onPreferencesStateChange,
|
|
17
18
|
onNetworkStateChange,
|
|
18
19
|
onTokensStateChange
|
|
@@ -21,7 +22,7 @@ class TokenRatesController extends BaseController {
|
|
|
21
22
|
config,
|
|
22
23
|
state
|
|
23
24
|
});
|
|
24
|
-
_defineProperty(this, "
|
|
25
|
+
_defineProperty(this, "pollingManager", void 0);
|
|
25
26
|
this.defaultState = _objectSpread(_objectSpread({}, this.defaultState), {}, {
|
|
26
27
|
contractExchangeRates: {}
|
|
27
28
|
});
|
|
@@ -56,6 +57,7 @@ class TokenRatesController extends BaseController {
|
|
|
56
57
|
this.updateExchangeRates();
|
|
57
58
|
}
|
|
58
59
|
});
|
|
60
|
+
this.pollingManager = new PollingManager(idleTimeTracker, this.config.pollInterval);
|
|
59
61
|
}
|
|
60
62
|
|
|
61
63
|
/**
|
|
@@ -63,15 +65,8 @@ class TokenRatesController extends BaseController {
|
|
|
63
65
|
* stored at the controller's conversionInterval property. If it is called and such an id already exists, the
|
|
64
66
|
* previous interval is clear and a new one is created.
|
|
65
67
|
*/
|
|
66
|
-
scheduleConversionInterval() {
|
|
67
|
-
|
|
68
|
-
window.clearInterval(this.conversionInterval);
|
|
69
|
-
}
|
|
70
|
-
this.conversionInterval = window.setInterval(() => {
|
|
71
|
-
if (!idleTimeTracker.checkIfIdle()) {
|
|
72
|
-
this.updateExchangeRates();
|
|
73
|
-
}
|
|
74
|
-
}, this.config.pollInterval);
|
|
68
|
+
async scheduleConversionInterval() {
|
|
69
|
+
this.pollingManager.start(this.updateExchangeRates.bind(this));
|
|
75
70
|
}
|
|
76
71
|
async updateExchangeRates() {
|
|
77
72
|
const chainCodes = COINGECKO_PLATFORMS_CHAIN_CODE_MAP[this.config.chainId];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _objectSpread from '@babel/runtime/helpers/objectSpread2';
|
|
2
2
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
3
|
-
import { BaseController,
|
|
3
|
+
import { BaseController, PollingManager } from '@toruslabs/base-controllers';
|
|
4
4
|
import { BrowserProvider, Contract, toQuantity } from 'ethers';
|
|
5
5
|
import log from 'loglevel';
|
|
6
6
|
import { singleBalanceCheckerAbi } from '../utils/abis.js';
|
|
@@ -14,6 +14,7 @@ class TokensController extends BaseController {
|
|
|
14
14
|
config,
|
|
15
15
|
state,
|
|
16
16
|
provider,
|
|
17
|
+
idleTimeTracker,
|
|
17
18
|
getCustomTokens,
|
|
18
19
|
getEtherScanTokens,
|
|
19
20
|
getProviderConfig,
|
|
@@ -27,7 +28,7 @@ class TokensController extends BaseController {
|
|
|
27
28
|
_defineProperty(this, "name", "TokensController");
|
|
28
29
|
_defineProperty(this, "provider", void 0);
|
|
29
30
|
_defineProperty(this, "ethersProvider", void 0);
|
|
30
|
-
_defineProperty(this, "
|
|
31
|
+
_defineProperty(this, "pollingManager", void 0);
|
|
31
32
|
_defineProperty(this, "getProviderConfig", void 0);
|
|
32
33
|
_defineProperty(this, "getCustomTokens", void 0);
|
|
33
34
|
_defineProperty(this, "getEtherScanTokens", void 0);
|
|
@@ -64,6 +65,7 @@ class TokensController extends BaseController {
|
|
|
64
65
|
this.restartTokenDetection();
|
|
65
66
|
}
|
|
66
67
|
});
|
|
68
|
+
this.pollingManager = new PollingManager(idleTimeTracker, this.config.interval);
|
|
67
69
|
}
|
|
68
70
|
get userSelectedAddress() {
|
|
69
71
|
return this.config.selectedAddress;
|
|
@@ -73,21 +75,6 @@ class TokensController extends BaseController {
|
|
|
73
75
|
if (!this.userSelectedAddress) return [];
|
|
74
76
|
return (_this$state$tokens$th = this.state.tokens[this.userSelectedAddress]) !== null && _this$state$tokens$th !== void 0 ? _this$state$tokens$th : [];
|
|
75
77
|
}
|
|
76
|
-
get interval() {
|
|
77
|
-
return this.config.interval;
|
|
78
|
-
}
|
|
79
|
-
set interval(interval) {
|
|
80
|
-
if (this._timer) window.clearInterval(this._timer);
|
|
81
|
-
if (!interval) {
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
this._timer = window.setInterval(() => {
|
|
85
|
-
if (!idleTimeTracker.checkIfIdle()) {
|
|
86
|
-
this.detectNewTokens();
|
|
87
|
-
this.refreshTokenBalances();
|
|
88
|
-
}
|
|
89
|
-
}, interval);
|
|
90
|
-
}
|
|
91
78
|
startTokenDetection(selectedAddress) {
|
|
92
79
|
this.configure({
|
|
93
80
|
selectedAddress
|
|
@@ -104,9 +91,10 @@ class TokensController extends BaseController {
|
|
|
104
91
|
if (!this.userSelectedAddress) {
|
|
105
92
|
return;
|
|
106
93
|
}
|
|
107
|
-
this.
|
|
108
|
-
|
|
109
|
-
|
|
94
|
+
this.pollingManager.start(async () => {
|
|
95
|
+
this.detectNewTokens();
|
|
96
|
+
await this.refreshTokenBalances();
|
|
97
|
+
});
|
|
110
98
|
}
|
|
111
99
|
detectNewTokens() {
|
|
112
100
|
const userAddress = this.userSelectedAddress;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@toruslabs/ethereum-controllers",
|
|
3
|
-
"version": "8.4.
|
|
3
|
+
"version": "8.4.6",
|
|
4
4
|
"homepage": "https://github.com/torusresearch/controllers#readme",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@ethereumjs/util": "^9.1.0",
|
|
23
23
|
"@metamask/delegation-toolkit": "^0.11.0",
|
|
24
|
-
"@toruslabs/base-controllers": "^8.4.
|
|
24
|
+
"@toruslabs/base-controllers": "^8.4.6",
|
|
25
25
|
"@toruslabs/http-helpers": "^8.1.1",
|
|
26
26
|
"@web3auth/auth": "^10.4.1",
|
|
27
27
|
"async-mutex": "^0.5.0",
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"publishConfig": {
|
|
64
64
|
"access": "public"
|
|
65
65
|
},
|
|
66
|
-
"gitHead": "
|
|
66
|
+
"gitHead": "9b83f0f321a2a91489825b2d440c172656bb91d7",
|
|
67
67
|
"devDependencies": {
|
|
68
68
|
"@typechain/ethers-v6": "^0.5.1",
|
|
69
69
|
"typechain": "^8.3.2"
|