@metamask/assets-controllers 74.3.2 → 75.0.0
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/CHANGELOG.md +21 -1
- package/dist/AccountTrackerController.cjs +28 -6
- package/dist/AccountTrackerController.cjs.map +1 -1
- package/dist/AccountTrackerController.d.cts +3 -3
- package/dist/AccountTrackerController.d.cts.map +1 -1
- package/dist/AccountTrackerController.d.mts +3 -3
- package/dist/AccountTrackerController.d.mts.map +1 -1
- package/dist/AccountTrackerController.mjs +28 -6
- package/dist/AccountTrackerController.mjs.map +1 -1
- package/dist/CurrencyRateController.cjs +12 -2
- package/dist/CurrencyRateController.cjs.map +1 -1
- package/dist/CurrencyRateController.d.cts.map +1 -1
- package/dist/CurrencyRateController.d.mts.map +1 -1
- package/dist/CurrencyRateController.mjs +12 -2
- package/dist/CurrencyRateController.mjs.map +1 -1
- package/dist/DeFiPositionsController/DeFiPositionsController.cjs +4 -0
- package/dist/DeFiPositionsController/DeFiPositionsController.cjs.map +1 -1
- package/dist/DeFiPositionsController/DeFiPositionsController.d.cts.map +1 -1
- package/dist/DeFiPositionsController/DeFiPositionsController.d.mts.map +1 -1
- package/dist/DeFiPositionsController/DeFiPositionsController.mjs +4 -0
- package/dist/DeFiPositionsController/DeFiPositionsController.mjs.map +1 -1
- package/dist/MultichainAssetsController/MultichainAssetsController.cjs +4 -0
- package/dist/MultichainAssetsController/MultichainAssetsController.cjs.map +1 -1
- package/dist/MultichainAssetsController/MultichainAssetsController.d.cts.map +1 -1
- package/dist/MultichainAssetsController/MultichainAssetsController.d.mts.map +1 -1
- package/dist/MultichainAssetsController/MultichainAssetsController.mjs +4 -0
- package/dist/MultichainAssetsController/MultichainAssetsController.mjs.map +1 -1
- package/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.cjs +12 -2
- package/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.cjs.map +1 -1
- package/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.d.cts.map +1 -1
- package/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.d.mts.map +1 -1
- package/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.mjs +12 -2
- package/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.mjs.map +1 -1
- package/dist/MultichainBalancesController/MultichainBalancesController.cjs +2 -0
- package/dist/MultichainBalancesController/MultichainBalancesController.cjs.map +1 -1
- package/dist/MultichainBalancesController/MultichainBalancesController.d.cts.map +1 -1
- package/dist/MultichainBalancesController/MultichainBalancesController.d.mts.map +1 -1
- package/dist/MultichainBalancesController/MultichainBalancesController.mjs +2 -0
- package/dist/MultichainBalancesController/MultichainBalancesController.mjs.map +1 -1
- package/dist/NftController.cjs +18 -3
- package/dist/NftController.cjs.map +1 -1
- package/dist/NftController.d.cts.map +1 -1
- package/dist/NftController.d.mts.map +1 -1
- package/dist/NftController.mjs +18 -3
- package/dist/NftController.mjs.map +1 -1
- package/dist/RatesController/RatesController.cjs +18 -3
- package/dist/RatesController/RatesController.cjs.map +1 -1
- package/dist/RatesController/RatesController.d.cts.map +1 -1
- package/dist/RatesController/RatesController.d.mts.map +1 -1
- package/dist/RatesController/RatesController.mjs +18 -3
- package/dist/RatesController/RatesController.mjs.map +1 -1
- package/dist/TokenBalancesController.cjs +154 -6
- package/dist/TokenBalancesController.cjs.map +1 -1
- package/dist/TokenBalancesController.d.cts +55 -4
- package/dist/TokenBalancesController.d.cts.map +1 -1
- package/dist/TokenBalancesController.d.mts +55 -4
- package/dist/TokenBalancesController.d.mts.map +1 -1
- package/dist/TokenBalancesController.mjs +154 -6
- package/dist/TokenBalancesController.mjs.map +1 -1
- package/dist/TokenListController.cjs +12 -2
- package/dist/TokenListController.cjs.map +1 -1
- package/dist/TokenListController.d.cts.map +1 -1
- package/dist/TokenListController.d.mts.map +1 -1
- package/dist/TokenListController.mjs +12 -2
- package/dist/TokenListController.mjs.map +1 -1
- package/dist/TokenRatesController.cjs +6 -1
- package/dist/TokenRatesController.cjs.map +1 -1
- package/dist/TokenRatesController.d.cts.map +1 -1
- package/dist/TokenRatesController.d.mts.map +1 -1
- package/dist/TokenRatesController.mjs +6 -1
- package/dist/TokenRatesController.mjs.map +1 -1
- package/dist/TokenSearchDiscoveryDataController/TokenSearchDiscoveryDataController.cjs +12 -2
- package/dist/TokenSearchDiscoveryDataController/TokenSearchDiscoveryDataController.cjs.map +1 -1
- package/dist/TokenSearchDiscoveryDataController/TokenSearchDiscoveryDataController.d.cts.map +1 -1
- package/dist/TokenSearchDiscoveryDataController/TokenSearchDiscoveryDataController.d.mts.map +1 -1
- package/dist/TokenSearchDiscoveryDataController/TokenSearchDiscoveryDataController.mjs +12 -2
- package/dist/TokenSearchDiscoveryDataController/TokenSearchDiscoveryDataController.mjs.map +1 -1
- package/dist/TokensController.cjs +6 -0
- package/dist/TokensController.cjs.map +1 -1
- package/dist/TokensController.d.cts.map +1 -1
- package/dist/TokensController.d.mts.map +1 -1
- package/dist/TokensController.mjs +6 -0
- package/dist/TokensController.mjs.map +1 -1
- package/package.json +9 -9
|
@@ -14,7 +14,15 @@ export type TokenBalancesControllerState = {
|
|
|
14
14
|
tokenBalances: TokenBalances;
|
|
15
15
|
};
|
|
16
16
|
export type TokenBalancesControllerGetStateAction = ControllerGetStateAction<typeof CONTROLLER, TokenBalancesControllerState>;
|
|
17
|
-
export type
|
|
17
|
+
export type TokenBalancesControllerUpdateChainPollingConfigsAction = {
|
|
18
|
+
type: `TokenBalancesController:updateChainPollingConfigs`;
|
|
19
|
+
handler: TokenBalancesController['updateChainPollingConfigs'];
|
|
20
|
+
};
|
|
21
|
+
export type TokenBalancesControllerGetChainPollingConfigAction = {
|
|
22
|
+
type: `TokenBalancesController:getChainPollingConfig`;
|
|
23
|
+
handler: TokenBalancesController['getChainPollingConfig'];
|
|
24
|
+
};
|
|
25
|
+
export type TokenBalancesControllerActions = TokenBalancesControllerGetStateAction | TokenBalancesControllerUpdateChainPollingConfigsAction | TokenBalancesControllerGetChainPollingConfigAction;
|
|
18
26
|
export type TokenBalancesControllerStateChangeEvent = ControllerStateChangeEvent<typeof CONTROLLER, TokenBalancesControllerState>;
|
|
19
27
|
export type NativeBalanceEvent = {
|
|
20
28
|
type: `${typeof CONTROLLER}:updatedNativeBalance`;
|
|
@@ -24,14 +32,25 @@ export type TokenBalancesControllerEvents = TokenBalancesControllerStateChangeEv
|
|
|
24
32
|
export type AllowedActions = NetworkControllerGetNetworkClientByIdAction | NetworkControllerGetStateAction | TokensControllerGetStateAction | PreferencesControllerGetStateAction | AccountsControllerGetSelectedAccountAction | AccountsControllerListAccountsAction | AccountTrackerUpdateNativeBalancesAction | AccountTrackerUpdateStakedBalancesAction;
|
|
25
33
|
export type AllowedEvents = TokensControllerStateChangeEvent | PreferencesControllerStateChangeEvent | NetworkControllerStateChangeEvent | KeyringControllerAccountRemovedEvent;
|
|
26
34
|
export type TokenBalancesControllerMessenger = RestrictedMessenger<typeof CONTROLLER, TokenBalancesControllerActions | AllowedActions, TokenBalancesControllerEvents | AllowedEvents, AllowedActions['type'], AllowedEvents['type']>;
|
|
35
|
+
export type ChainPollingConfig = {
|
|
36
|
+
/** Polling interval in milliseconds for this chain */
|
|
37
|
+
interval: number;
|
|
38
|
+
};
|
|
39
|
+
export type UpdateChainPollingConfigsOptions = {
|
|
40
|
+
/** Whether to immediately fetch balances after updating configs (default: true) */
|
|
41
|
+
immediateUpdate?: boolean;
|
|
42
|
+
};
|
|
27
43
|
export type TokenBalancesControllerOptions = {
|
|
28
44
|
messenger: TokenBalancesControllerMessenger;
|
|
45
|
+
/** Default interval for chains not specified in chainPollingIntervals */
|
|
29
46
|
interval?: number;
|
|
47
|
+
/** Per-chain polling configuration */
|
|
48
|
+
chainPollingIntervals?: Record<ChainIdHex, ChainPollingConfig>;
|
|
30
49
|
state?: Partial<TokenBalancesControllerState>;
|
|
31
50
|
/** When `true`, balances for *all* known accounts are queried. */
|
|
32
51
|
queryMultipleAccounts?: boolean;
|
|
33
|
-
/**
|
|
34
|
-
|
|
52
|
+
/** Array of chainIds that should use Accounts-API strategy (if supported by API). */
|
|
53
|
+
accountsApiChainIds?: ChainIdHex[];
|
|
35
54
|
/** Disable external HTTP calls (privacy / offline mode). */
|
|
36
55
|
allowExternalServices?: () => boolean;
|
|
37
56
|
/** Custom logger. */
|
|
@@ -66,14 +85,46 @@ declare const TokenBalancesController_base: (abstract new (...args: any[]) => {
|
|
|
66
85
|
}) & typeof import("@metamask/base-controller").BaseController;
|
|
67
86
|
export declare class TokenBalancesController extends TokenBalancesController_base<typeof CONTROLLER, TokenBalancesControllerState, TokenBalancesControllerMessenger> {
|
|
68
87
|
#private;
|
|
69
|
-
constructor({ messenger, interval, state, queryMultipleAccounts,
|
|
88
|
+
constructor({ messenger, interval, chainPollingIntervals, state, queryMultipleAccounts, accountsApiChainIds, allowExternalServices, }: TokenBalancesControllerOptions);
|
|
89
|
+
/**
|
|
90
|
+
* Override to support per-chain polling intervals by grouping chains by interval
|
|
91
|
+
*
|
|
92
|
+
* @param options0 - The polling options
|
|
93
|
+
* @param options0.chainIds - Chain IDs to start polling for
|
|
94
|
+
*/
|
|
95
|
+
_startPolling({ chainIds }: {
|
|
96
|
+
chainIds: ChainIdHex[];
|
|
97
|
+
}): void;
|
|
98
|
+
/**
|
|
99
|
+
* Override to handle our custom polling approach
|
|
100
|
+
*/
|
|
101
|
+
_stopPollingByPollingTokenSetId(): void;
|
|
102
|
+
/**
|
|
103
|
+
* Get polling configuration for a chain (includes default fallback)
|
|
104
|
+
*
|
|
105
|
+
* @param chainId - The chain ID to get config for
|
|
106
|
+
* @returns The polling configuration for the chain
|
|
107
|
+
*/
|
|
108
|
+
getChainPollingConfig(chainId: ChainIdHex): ChainPollingConfig;
|
|
70
109
|
_executePoll({ chainIds }: {
|
|
71
110
|
chainIds: ChainIdHex[];
|
|
72
111
|
}): Promise<void>;
|
|
112
|
+
/**
|
|
113
|
+
* Update multiple chain polling configurations at once
|
|
114
|
+
*
|
|
115
|
+
* @param configs - Object mapping chain IDs to polling configurations
|
|
116
|
+
* @param options - Optional configuration for the update behavior
|
|
117
|
+
* @param options.immediateUpdate - Whether to immediately fetch balances after updating configs (default: true)
|
|
118
|
+
*/
|
|
119
|
+
updateChainPollingConfigs(configs: Record<ChainIdHex, ChainPollingConfig>, options?: UpdateChainPollingConfigsOptions): void;
|
|
73
120
|
updateBalances({ chainIds }?: {
|
|
74
121
|
chainIds?: ChainIdHex[];
|
|
75
122
|
}): Promise<void>;
|
|
76
123
|
resetState(): void;
|
|
124
|
+
/**
|
|
125
|
+
* Clean up all timers and resources when controller is destroyed
|
|
126
|
+
*/
|
|
127
|
+
destroy(): void;
|
|
77
128
|
}
|
|
78
129
|
export default TokenBalancesController;
|
|
79
130
|
//# sourceMappingURL=TokenBalancesController.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenBalancesController.d.cts","sourceRoot":"","sources":["../src/TokenBalancesController.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,0CAA0C,EAC1C,oCAAoC,EACrC,sCAAsC;AACvC,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC1B,mBAAmB,EACpB,kCAAkC;AAOnC,OAAO,KAAK,EAAE,oCAAoC,EAAE,qCAAqC;AACzF,OAAO,KAAK,EACV,2CAA2C,EAC3C,+BAA+B,EAC/B,iCAAiC,EAElC,qCAAqC;AAEtC,OAAO,KAAK,EACV,mCAAmC,EACnC,qCAAqC,EACtC,yCAAyC;AAC1C,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAK3C,OAAO,KAAK,EACV,wCAAwC,EACxC,wCAAwC,EACzC,uCAAmC;AAQpC,OAAO,KAAK,EACV,8BAA8B,EAE9B,gCAAgC,EACjC,+BAA2B;AAE5B,MAAM,MAAM,UAAU,GAAG,GAAG,CAAC;AAC7B,MAAM,MAAM,eAAe,GAAG,GAAG,CAAC;AAElC,QAAA,MAAM,UAAU,2BAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"TokenBalancesController.d.cts","sourceRoot":"","sources":["../src/TokenBalancesController.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,15 @@ export type TokenBalancesControllerState = {
|
|
|
14
14
|
tokenBalances: TokenBalances;
|
|
15
15
|
};
|
|
16
16
|
export type TokenBalancesControllerGetStateAction = ControllerGetStateAction<typeof CONTROLLER, TokenBalancesControllerState>;
|
|
17
|
-
export type
|
|
17
|
+
export type TokenBalancesControllerUpdateChainPollingConfigsAction = {
|
|
18
|
+
type: `TokenBalancesController:updateChainPollingConfigs`;
|
|
19
|
+
handler: TokenBalancesController['updateChainPollingConfigs'];
|
|
20
|
+
};
|
|
21
|
+
export type TokenBalancesControllerGetChainPollingConfigAction = {
|
|
22
|
+
type: `TokenBalancesController:getChainPollingConfig`;
|
|
23
|
+
handler: TokenBalancesController['getChainPollingConfig'];
|
|
24
|
+
};
|
|
25
|
+
export type TokenBalancesControllerActions = TokenBalancesControllerGetStateAction | TokenBalancesControllerUpdateChainPollingConfigsAction | TokenBalancesControllerGetChainPollingConfigAction;
|
|
18
26
|
export type TokenBalancesControllerStateChangeEvent = ControllerStateChangeEvent<typeof CONTROLLER, TokenBalancesControllerState>;
|
|
19
27
|
export type NativeBalanceEvent = {
|
|
20
28
|
type: `${typeof CONTROLLER}:updatedNativeBalance`;
|
|
@@ -24,14 +32,25 @@ export type TokenBalancesControllerEvents = TokenBalancesControllerStateChangeEv
|
|
|
24
32
|
export type AllowedActions = NetworkControllerGetNetworkClientByIdAction | NetworkControllerGetStateAction | TokensControllerGetStateAction | PreferencesControllerGetStateAction | AccountsControllerGetSelectedAccountAction | AccountsControllerListAccountsAction | AccountTrackerUpdateNativeBalancesAction | AccountTrackerUpdateStakedBalancesAction;
|
|
25
33
|
export type AllowedEvents = TokensControllerStateChangeEvent | PreferencesControllerStateChangeEvent | NetworkControllerStateChangeEvent | KeyringControllerAccountRemovedEvent;
|
|
26
34
|
export type TokenBalancesControllerMessenger = RestrictedMessenger<typeof CONTROLLER, TokenBalancesControllerActions | AllowedActions, TokenBalancesControllerEvents | AllowedEvents, AllowedActions['type'], AllowedEvents['type']>;
|
|
35
|
+
export type ChainPollingConfig = {
|
|
36
|
+
/** Polling interval in milliseconds for this chain */
|
|
37
|
+
interval: number;
|
|
38
|
+
};
|
|
39
|
+
export type UpdateChainPollingConfigsOptions = {
|
|
40
|
+
/** Whether to immediately fetch balances after updating configs (default: true) */
|
|
41
|
+
immediateUpdate?: boolean;
|
|
42
|
+
};
|
|
27
43
|
export type TokenBalancesControllerOptions = {
|
|
28
44
|
messenger: TokenBalancesControllerMessenger;
|
|
45
|
+
/** Default interval for chains not specified in chainPollingIntervals */
|
|
29
46
|
interval?: number;
|
|
47
|
+
/** Per-chain polling configuration */
|
|
48
|
+
chainPollingIntervals?: Record<ChainIdHex, ChainPollingConfig>;
|
|
30
49
|
state?: Partial<TokenBalancesControllerState>;
|
|
31
50
|
/** When `true`, balances for *all* known accounts are queried. */
|
|
32
51
|
queryMultipleAccounts?: boolean;
|
|
33
|
-
/**
|
|
34
|
-
|
|
52
|
+
/** Array of chainIds that should use Accounts-API strategy (if supported by API). */
|
|
53
|
+
accountsApiChainIds?: ChainIdHex[];
|
|
35
54
|
/** Disable external HTTP calls (privacy / offline mode). */
|
|
36
55
|
allowExternalServices?: () => boolean;
|
|
37
56
|
/** Custom logger. */
|
|
@@ -66,14 +85,46 @@ declare const TokenBalancesController_base: (abstract new (...args: any[]) => {
|
|
|
66
85
|
}) & typeof import("@metamask/base-controller").BaseController;
|
|
67
86
|
export declare class TokenBalancesController extends TokenBalancesController_base<typeof CONTROLLER, TokenBalancesControllerState, TokenBalancesControllerMessenger> {
|
|
68
87
|
#private;
|
|
69
|
-
constructor({ messenger, interval, state, queryMultipleAccounts,
|
|
88
|
+
constructor({ messenger, interval, chainPollingIntervals, state, queryMultipleAccounts, accountsApiChainIds, allowExternalServices, }: TokenBalancesControllerOptions);
|
|
89
|
+
/**
|
|
90
|
+
* Override to support per-chain polling intervals by grouping chains by interval
|
|
91
|
+
*
|
|
92
|
+
* @param options0 - The polling options
|
|
93
|
+
* @param options0.chainIds - Chain IDs to start polling for
|
|
94
|
+
*/
|
|
95
|
+
_startPolling({ chainIds }: {
|
|
96
|
+
chainIds: ChainIdHex[];
|
|
97
|
+
}): void;
|
|
98
|
+
/**
|
|
99
|
+
* Override to handle our custom polling approach
|
|
100
|
+
*/
|
|
101
|
+
_stopPollingByPollingTokenSetId(): void;
|
|
102
|
+
/**
|
|
103
|
+
* Get polling configuration for a chain (includes default fallback)
|
|
104
|
+
*
|
|
105
|
+
* @param chainId - The chain ID to get config for
|
|
106
|
+
* @returns The polling configuration for the chain
|
|
107
|
+
*/
|
|
108
|
+
getChainPollingConfig(chainId: ChainIdHex): ChainPollingConfig;
|
|
70
109
|
_executePoll({ chainIds }: {
|
|
71
110
|
chainIds: ChainIdHex[];
|
|
72
111
|
}): Promise<void>;
|
|
112
|
+
/**
|
|
113
|
+
* Update multiple chain polling configurations at once
|
|
114
|
+
*
|
|
115
|
+
* @param configs - Object mapping chain IDs to polling configurations
|
|
116
|
+
* @param options - Optional configuration for the update behavior
|
|
117
|
+
* @param options.immediateUpdate - Whether to immediately fetch balances after updating configs (default: true)
|
|
118
|
+
*/
|
|
119
|
+
updateChainPollingConfigs(configs: Record<ChainIdHex, ChainPollingConfig>, options?: UpdateChainPollingConfigsOptions): void;
|
|
73
120
|
updateBalances({ chainIds }?: {
|
|
74
121
|
chainIds?: ChainIdHex[];
|
|
75
122
|
}): Promise<void>;
|
|
76
123
|
resetState(): void;
|
|
124
|
+
/**
|
|
125
|
+
* Clean up all timers and resources when controller is destroyed
|
|
126
|
+
*/
|
|
127
|
+
destroy(): void;
|
|
77
128
|
}
|
|
78
129
|
export default TokenBalancesController;
|
|
79
130
|
//# sourceMappingURL=TokenBalancesController.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenBalancesController.d.mts","sourceRoot":"","sources":["../src/TokenBalancesController.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,0CAA0C,EAC1C,oCAAoC,EACrC,sCAAsC;AACvC,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC1B,mBAAmB,EACpB,kCAAkC;AAOnC,OAAO,KAAK,EAAE,oCAAoC,EAAE,qCAAqC;AACzF,OAAO,KAAK,EACV,2CAA2C,EAC3C,+BAA+B,EAC/B,iCAAiC,EAElC,qCAAqC;AAEtC,OAAO,KAAK,EACV,mCAAmC,EACnC,qCAAqC,EACtC,yCAAyC;AAC1C,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAK3C,OAAO,KAAK,EACV,wCAAwC,EACxC,wCAAwC,EACzC,uCAAmC;AAQpC,OAAO,KAAK,EACV,8BAA8B,EAE9B,gCAAgC,EACjC,+BAA2B;AAE5B,MAAM,MAAM,UAAU,GAAG,GAAG,CAAC;AAC7B,MAAM,MAAM,eAAe,GAAG,GAAG,CAAC;AAElC,QAAA,MAAM,UAAU,2BAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"TokenBalancesController.d.mts","sourceRoot":"","sources":["../src/TokenBalancesController.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
9
9
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
11
|
};
|
|
12
|
-
var _TokenBalancesController_instances, _TokenBalancesController_queryAllAccounts, _TokenBalancesController_balanceFetchers, _TokenBalancesController_allTokens, _TokenBalancesController_detectedTokens, _TokenBalancesController_chainIdsWithTokens, _TokenBalancesController_getProvider, _TokenBalancesController_getNetworkClient, _TokenBalancesController_onTokensChanged, _TokenBalancesController_onNetworkChanged, _TokenBalancesController_onAccountRemoved;
|
|
12
|
+
var _TokenBalancesController_instances, _TokenBalancesController_queryAllAccounts, _TokenBalancesController_accountsApiChainIds, _TokenBalancesController_balanceFetchers, _TokenBalancesController_allTokens, _TokenBalancesController_detectedTokens, _TokenBalancesController_defaultInterval, _TokenBalancesController_chainPollingConfig, _TokenBalancesController_intervalPollingTimers, _TokenBalancesController_isControllerPollingActive, _TokenBalancesController_requestedChainIds, _TokenBalancesController_chainIdsWithTokens, _TokenBalancesController_getProvider, _TokenBalancesController_getNetworkClient, _TokenBalancesController_createAccountsApiFetcher, _TokenBalancesController_startIntervalGroupPolling, _TokenBalancesController_startPollingForInterval, _TokenBalancesController_setPollingTimer, _TokenBalancesController_onTokensChanged, _TokenBalancesController_onNetworkChanged, _TokenBalancesController_onAccountRemoved;
|
|
13
13
|
import { Web3Provider } from "@ethersproject/providers";
|
|
14
14
|
import { BNToHex, isValidHexAddress, toChecksumHexAddress, toHex } from "@metamask/controller-utils";
|
|
15
15
|
import { StaticIntervalPollingController } from "@metamask/polling-controller";
|
|
@@ -23,7 +23,12 @@ import { RpcBalanceFetcher } from "./rpc-service/rpc-balance-fetcher.mjs";
|
|
|
23
23
|
const CONTROLLER = 'TokenBalancesController';
|
|
24
24
|
const DEFAULT_INTERVAL_MS = 180000; // 3 minutes
|
|
25
25
|
const metadata = {
|
|
26
|
-
tokenBalances: {
|
|
26
|
+
tokenBalances: {
|
|
27
|
+
includeInStateLogs: false,
|
|
28
|
+
persist: true,
|
|
29
|
+
anonymous: false,
|
|
30
|
+
usedInUi: true,
|
|
31
|
+
},
|
|
27
32
|
};
|
|
28
33
|
// endregion
|
|
29
34
|
// ────────────────────────────────────────────────────────────────────────────
|
|
@@ -35,7 +40,7 @@ const checksum = (addr) => toChecksumHexAddress(addr);
|
|
|
35
40
|
// ────────────────────────────────────────────────────────────────────────────
|
|
36
41
|
// region: Main controller
|
|
37
42
|
export class TokenBalancesController extends StaticIntervalPollingController() {
|
|
38
|
-
constructor({ messenger, interval = DEFAULT_INTERVAL_MS, state = {}, queryMultipleAccounts = true,
|
|
43
|
+
constructor({ messenger, interval = DEFAULT_INTERVAL_MS, chainPollingIntervals = {}, state = {}, queryMultipleAccounts = true, accountsApiChainIds = [], allowExternalServices = () => true, }) {
|
|
39
44
|
super({
|
|
40
45
|
name: CONTROLLER,
|
|
41
46
|
messenger,
|
|
@@ -44,9 +49,20 @@ export class TokenBalancesController extends StaticIntervalPollingController() {
|
|
|
44
49
|
});
|
|
45
50
|
_TokenBalancesController_instances.add(this);
|
|
46
51
|
_TokenBalancesController_queryAllAccounts.set(this, void 0);
|
|
52
|
+
_TokenBalancesController_accountsApiChainIds.set(this, void 0);
|
|
47
53
|
_TokenBalancesController_balanceFetchers.set(this, void 0);
|
|
48
54
|
_TokenBalancesController_allTokens.set(this, {});
|
|
49
55
|
_TokenBalancesController_detectedTokens.set(this, {});
|
|
56
|
+
/** Default polling interval for chains without specific configuration */
|
|
57
|
+
_TokenBalancesController_defaultInterval.set(this, void 0);
|
|
58
|
+
/** Per-chain polling configuration */
|
|
59
|
+
_TokenBalancesController_chainPollingConfig.set(this, void 0);
|
|
60
|
+
/** Active polling timers grouped by interval */
|
|
61
|
+
_TokenBalancesController_intervalPollingTimers.set(this, new Map());
|
|
62
|
+
/** Track if controller-level polling is active */
|
|
63
|
+
_TokenBalancesController_isControllerPollingActive.set(this, false);
|
|
64
|
+
/** Store original chainIds from startPolling to preserve intent */
|
|
65
|
+
_TokenBalancesController_requestedChainIds.set(this, []);
|
|
50
66
|
_TokenBalancesController_getProvider.set(this, (chainId) => {
|
|
51
67
|
const { networkConfigurationsByChainId } = this.messagingSystem.call('NetworkController:getState');
|
|
52
68
|
const cfg = networkConfigurationsByChainId[chainId];
|
|
@@ -60,6 +76,24 @@ export class TokenBalancesController extends StaticIntervalPollingController() {
|
|
|
60
76
|
const { networkClientId } = cfg.rpcEndpoints[cfg.defaultRpcEndpointIndex];
|
|
61
77
|
return this.messagingSystem.call('NetworkController:getNetworkClientById', networkClientId);
|
|
62
78
|
});
|
|
79
|
+
/**
|
|
80
|
+
* Creates an AccountsApiBalanceFetcher that only supports chains in the accountsApiChainIds array
|
|
81
|
+
*
|
|
82
|
+
* @returns A BalanceFetcher that wraps AccountsApiBalanceFetcher with chainId filtering
|
|
83
|
+
*/
|
|
84
|
+
_TokenBalancesController_createAccountsApiFetcher.set(this, () => {
|
|
85
|
+
const originalFetcher = new AccountsApiBalanceFetcher('extension', __classPrivateFieldGet(this, _TokenBalancesController_getProvider, "f"));
|
|
86
|
+
return {
|
|
87
|
+
supports: (chainId) => {
|
|
88
|
+
// Only support chains that are both:
|
|
89
|
+
// 1. In our specified accountsApiChainIds array
|
|
90
|
+
// 2. Actually supported by the AccountsApi
|
|
91
|
+
return (__classPrivateFieldGet(this, _TokenBalancesController_accountsApiChainIds, "f").includes(chainId) &&
|
|
92
|
+
originalFetcher.supports(chainId));
|
|
93
|
+
},
|
|
94
|
+
fetch: originalFetcher.fetch.bind(originalFetcher),
|
|
95
|
+
};
|
|
96
|
+
});
|
|
63
97
|
_TokenBalancesController_onTokensChanged.set(this, async (state) => {
|
|
64
98
|
const changed = [];
|
|
65
99
|
let hasChanges = false;
|
|
@@ -174,10 +208,13 @@ export class TokenBalancesController extends StaticIntervalPollingController() {
|
|
|
174
208
|
});
|
|
175
209
|
});
|
|
176
210
|
__classPrivateFieldSet(this, _TokenBalancesController_queryAllAccounts, queryMultipleAccounts, "f");
|
|
211
|
+
__classPrivateFieldSet(this, _TokenBalancesController_accountsApiChainIds, [...accountsApiChainIds], "f");
|
|
212
|
+
__classPrivateFieldSet(this, _TokenBalancesController_defaultInterval, interval, "f");
|
|
213
|
+
__classPrivateFieldSet(this, _TokenBalancesController_chainPollingConfig, { ...chainPollingIntervals }, "f");
|
|
177
214
|
// Strategy order: API first, then RPC fallback
|
|
178
215
|
__classPrivateFieldSet(this, _TokenBalancesController_balanceFetchers, [
|
|
179
|
-
...(
|
|
180
|
-
? [
|
|
216
|
+
...(accountsApiChainIds.length > 0 && allowExternalServices()
|
|
217
|
+
? [__classPrivateFieldGet(this, _TokenBalancesController_createAccountsApiFetcher, "f").call(this)]
|
|
181
218
|
: []),
|
|
182
219
|
new RpcBalanceFetcher(__classPrivateFieldGet(this, _TokenBalancesController_getProvider, "f"), __classPrivateFieldGet(this, _TokenBalancesController_getNetworkClient, "f"), () => ({
|
|
183
220
|
allTokens: __classPrivateFieldGet(this, _TokenBalancesController_allTokens, "f"),
|
|
@@ -196,10 +233,61 @@ export class TokenBalancesController extends StaticIntervalPollingController() {
|
|
|
196
233
|
});
|
|
197
234
|
this.messagingSystem.subscribe('NetworkController:stateChange', __classPrivateFieldGet(this, _TokenBalancesController_onNetworkChanged, "f"));
|
|
198
235
|
this.messagingSystem.subscribe('KeyringController:accountRemoved', __classPrivateFieldGet(this, _TokenBalancesController_onAccountRemoved, "f"));
|
|
236
|
+
// Register action handlers for polling interval control
|
|
237
|
+
this.messagingSystem.registerActionHandler(`TokenBalancesController:updateChainPollingConfigs`, this.updateChainPollingConfigs.bind(this));
|
|
238
|
+
this.messagingSystem.registerActionHandler(`TokenBalancesController:getChainPollingConfig`, this.getChainPollingConfig.bind(this));
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Override to support per-chain polling intervals by grouping chains by interval
|
|
242
|
+
*
|
|
243
|
+
* @param options0 - The polling options
|
|
244
|
+
* @param options0.chainIds - Chain IDs to start polling for
|
|
245
|
+
*/
|
|
246
|
+
_startPolling({ chainIds }) {
|
|
247
|
+
// Store the original chainIds to preserve intent across config updates
|
|
248
|
+
__classPrivateFieldSet(this, _TokenBalancesController_requestedChainIds, [...chainIds], "f");
|
|
249
|
+
__classPrivateFieldSet(this, _TokenBalancesController_isControllerPollingActive, true, "f");
|
|
250
|
+
__classPrivateFieldGet(this, _TokenBalancesController_instances, "m", _TokenBalancesController_startIntervalGroupPolling).call(this, chainIds, true);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Override to handle our custom polling approach
|
|
254
|
+
*/
|
|
255
|
+
_stopPollingByPollingTokenSetId() {
|
|
256
|
+
__classPrivateFieldSet(this, _TokenBalancesController_isControllerPollingActive, false, "f");
|
|
257
|
+
__classPrivateFieldSet(this, _TokenBalancesController_requestedChainIds, [], "f"); // Clear original intent when stopping
|
|
258
|
+
__classPrivateFieldGet(this, _TokenBalancesController_intervalPollingTimers, "f").forEach((timer) => clearInterval(timer));
|
|
259
|
+
__classPrivateFieldGet(this, _TokenBalancesController_intervalPollingTimers, "f").clear();
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Get polling configuration for a chain (includes default fallback)
|
|
263
|
+
*
|
|
264
|
+
* @param chainId - The chain ID to get config for
|
|
265
|
+
* @returns The polling configuration for the chain
|
|
266
|
+
*/
|
|
267
|
+
getChainPollingConfig(chainId) {
|
|
268
|
+
return (__classPrivateFieldGet(this, _TokenBalancesController_chainPollingConfig, "f")[chainId] ?? {
|
|
269
|
+
interval: __classPrivateFieldGet(this, _TokenBalancesController_defaultInterval, "f"),
|
|
270
|
+
});
|
|
199
271
|
}
|
|
200
272
|
async _executePoll({ chainIds }) {
|
|
273
|
+
// This won't be called with our custom implementation, but keep for compatibility
|
|
201
274
|
await this.updateBalances({ chainIds });
|
|
202
275
|
}
|
|
276
|
+
/**
|
|
277
|
+
* Update multiple chain polling configurations at once
|
|
278
|
+
*
|
|
279
|
+
* @param configs - Object mapping chain IDs to polling configurations
|
|
280
|
+
* @param options - Optional configuration for the update behavior
|
|
281
|
+
* @param options.immediateUpdate - Whether to immediately fetch balances after updating configs (default: true)
|
|
282
|
+
*/
|
|
283
|
+
updateChainPollingConfigs(configs, options = { immediateUpdate: true }) {
|
|
284
|
+
Object.assign(__classPrivateFieldGet(this, _TokenBalancesController_chainPollingConfig, "f"), configs);
|
|
285
|
+
// If polling is currently active, restart with new interval groupings
|
|
286
|
+
if (__classPrivateFieldGet(this, _TokenBalancesController_isControllerPollingActive, "f")) {
|
|
287
|
+
// Restart polling with immediate fetch by default, unless explicitly disabled
|
|
288
|
+
__classPrivateFieldGet(this, _TokenBalancesController_instances, "m", _TokenBalancesController_startIntervalGroupPolling).call(this, __classPrivateFieldGet(this, _TokenBalancesController_requestedChainIds, "f"), options.immediateUpdate);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
203
291
|
async updateBalances({ chainIds } = {}) {
|
|
204
292
|
const targetChains = chainIds ?? __classPrivateFieldGet(this, _TokenBalancesController_instances, "m", _TokenBalancesController_chainIdsWithTokens).call(this);
|
|
205
293
|
if (!targetChains.length) {
|
|
@@ -310,14 +398,74 @@ export class TokenBalancesController extends StaticIntervalPollingController() {
|
|
|
310
398
|
resetState() {
|
|
311
399
|
this.update(() => ({ tokenBalances: {} }));
|
|
312
400
|
}
|
|
401
|
+
/**
|
|
402
|
+
* Clean up all timers and resources when controller is destroyed
|
|
403
|
+
*/
|
|
404
|
+
destroy() {
|
|
405
|
+
__classPrivateFieldSet(this, _TokenBalancesController_isControllerPollingActive, false, "f");
|
|
406
|
+
__classPrivateFieldGet(this, _TokenBalancesController_intervalPollingTimers, "f").forEach((timer) => clearInterval(timer));
|
|
407
|
+
__classPrivateFieldGet(this, _TokenBalancesController_intervalPollingTimers, "f").clear();
|
|
408
|
+
// Unregister action handlers
|
|
409
|
+
this.messagingSystem.unregisterActionHandler(`TokenBalancesController:updateChainPollingConfigs`);
|
|
410
|
+
this.messagingSystem.unregisterActionHandler(`TokenBalancesController:getChainPollingConfig`);
|
|
411
|
+
super.destroy();
|
|
412
|
+
}
|
|
313
413
|
}
|
|
314
|
-
_TokenBalancesController_queryAllAccounts = new WeakMap(), _TokenBalancesController_balanceFetchers = new WeakMap(), _TokenBalancesController_allTokens = new WeakMap(), _TokenBalancesController_detectedTokens = new WeakMap(), _TokenBalancesController_getProvider = new WeakMap(), _TokenBalancesController_getNetworkClient = new WeakMap(), _TokenBalancesController_onTokensChanged = new WeakMap(), _TokenBalancesController_onNetworkChanged = new WeakMap(), _TokenBalancesController_onAccountRemoved = new WeakMap(), _TokenBalancesController_instances = new WeakSet(), _TokenBalancesController_chainIdsWithTokens = function _TokenBalancesController_chainIdsWithTokens() {
|
|
414
|
+
_TokenBalancesController_queryAllAccounts = new WeakMap(), _TokenBalancesController_accountsApiChainIds = new WeakMap(), _TokenBalancesController_balanceFetchers = new WeakMap(), _TokenBalancesController_allTokens = new WeakMap(), _TokenBalancesController_detectedTokens = new WeakMap(), _TokenBalancesController_defaultInterval = new WeakMap(), _TokenBalancesController_chainPollingConfig = new WeakMap(), _TokenBalancesController_intervalPollingTimers = new WeakMap(), _TokenBalancesController_isControllerPollingActive = new WeakMap(), _TokenBalancesController_requestedChainIds = new WeakMap(), _TokenBalancesController_getProvider = new WeakMap(), _TokenBalancesController_getNetworkClient = new WeakMap(), _TokenBalancesController_createAccountsApiFetcher = new WeakMap(), _TokenBalancesController_onTokensChanged = new WeakMap(), _TokenBalancesController_onNetworkChanged = new WeakMap(), _TokenBalancesController_onAccountRemoved = new WeakMap(), _TokenBalancesController_instances = new WeakSet(), _TokenBalancesController_chainIdsWithTokens = function _TokenBalancesController_chainIdsWithTokens() {
|
|
315
415
|
return [
|
|
316
416
|
...new Set([
|
|
317
417
|
...Object.keys(__classPrivateFieldGet(this, _TokenBalancesController_allTokens, "f")),
|
|
318
418
|
...Object.keys(__classPrivateFieldGet(this, _TokenBalancesController_detectedTokens, "f")),
|
|
319
419
|
]),
|
|
320
420
|
];
|
|
421
|
+
}, _TokenBalancesController_startIntervalGroupPolling = function _TokenBalancesController_startIntervalGroupPolling(chainIds, immediate = true) {
|
|
422
|
+
// Stop any existing interval timers
|
|
423
|
+
__classPrivateFieldGet(this, _TokenBalancesController_intervalPollingTimers, "f").forEach((timer) => clearInterval(timer));
|
|
424
|
+
__classPrivateFieldGet(this, _TokenBalancesController_intervalPollingTimers, "f").clear();
|
|
425
|
+
// Group chains by their polling intervals
|
|
426
|
+
const intervalGroups = new Map();
|
|
427
|
+
for (const chainId of chainIds) {
|
|
428
|
+
const config = this.getChainPollingConfig(chainId);
|
|
429
|
+
const existing = intervalGroups.get(config.interval) || [];
|
|
430
|
+
existing.push(chainId);
|
|
431
|
+
intervalGroups.set(config.interval, existing);
|
|
432
|
+
}
|
|
433
|
+
// Start separate polling loop for each interval group
|
|
434
|
+
for (const [interval, chainIdsGroup] of intervalGroups) {
|
|
435
|
+
__classPrivateFieldGet(this, _TokenBalancesController_instances, "m", _TokenBalancesController_startPollingForInterval).call(this, interval, chainIdsGroup, immediate);
|
|
436
|
+
}
|
|
437
|
+
}, _TokenBalancesController_startPollingForInterval = function _TokenBalancesController_startPollingForInterval(interval, chainIds, immediate = true) {
|
|
438
|
+
const pollFunction = async () => {
|
|
439
|
+
if (!__classPrivateFieldGet(this, _TokenBalancesController_isControllerPollingActive, "f")) {
|
|
440
|
+
return;
|
|
441
|
+
}
|
|
442
|
+
try {
|
|
443
|
+
await this._executePoll({ chainIds });
|
|
444
|
+
}
|
|
445
|
+
catch (error) {
|
|
446
|
+
console.warn(`Polling failed for chains ${chainIds.join(', ')} with interval ${interval}:`, error);
|
|
447
|
+
}
|
|
448
|
+
};
|
|
449
|
+
// Poll immediately first if requested
|
|
450
|
+
if (immediate) {
|
|
451
|
+
pollFunction().catch((error) => {
|
|
452
|
+
console.warn(`Immediate polling failed for chains ${chainIds.join(', ')}:`, error);
|
|
453
|
+
});
|
|
454
|
+
}
|
|
455
|
+
// Then start regular interval polling
|
|
456
|
+
__classPrivateFieldGet(this, _TokenBalancesController_instances, "m", _TokenBalancesController_setPollingTimer).call(this, interval, chainIds, pollFunction);
|
|
457
|
+
}, _TokenBalancesController_setPollingTimer = function _TokenBalancesController_setPollingTimer(interval, chainIds, pollFunction) {
|
|
458
|
+
// Clear any existing timer for this interval first
|
|
459
|
+
const existingTimer = __classPrivateFieldGet(this, _TokenBalancesController_intervalPollingTimers, "f").get(interval);
|
|
460
|
+
if (existingTimer) {
|
|
461
|
+
clearInterval(existingTimer);
|
|
462
|
+
}
|
|
463
|
+
const timer = setInterval(() => {
|
|
464
|
+
pollFunction().catch((error) => {
|
|
465
|
+
console.warn(`Interval polling failed for chains ${chainIds.join(', ')}:`, error);
|
|
466
|
+
});
|
|
467
|
+
}, interval);
|
|
468
|
+
__classPrivateFieldGet(this, _TokenBalancesController_intervalPollingTimers, "f").set(interval, timer);
|
|
321
469
|
};
|
|
322
470
|
export default TokenBalancesController;
|
|
323
471
|
//# sourceMappingURL=TokenBalancesController.mjs.map
|