@metamask/assets-controller 1.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +36 -1
- package/dist/AssetsController.cjs +175 -64
- package/dist/AssetsController.cjs.map +1 -1
- package/dist/AssetsController.d.cts +68 -9
- package/dist/AssetsController.d.cts.map +1 -1
- package/dist/AssetsController.d.mts +68 -9
- package/dist/AssetsController.d.mts.map +1 -1
- package/dist/AssetsController.mjs +176 -65
- package/dist/AssetsController.mjs.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.cjs +70 -15
- package/dist/data-sources/AccountsApiDataSource.cjs.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.d.cts +22 -3
- package/dist/data-sources/AccountsApiDataSource.d.cts.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.d.mts +22 -3
- package/dist/data-sources/AccountsApiDataSource.d.mts.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.mjs +66 -12
- package/dist/data-sources/AccountsApiDataSource.mjs.map +1 -1
- package/dist/data-sources/BackendWebsocketDataSource.cjs +7 -5
- package/dist/data-sources/BackendWebsocketDataSource.cjs.map +1 -1
- package/dist/data-sources/BackendWebsocketDataSource.d.cts.map +1 -1
- package/dist/data-sources/BackendWebsocketDataSource.d.mts.map +1 -1
- package/dist/data-sources/BackendWebsocketDataSource.mjs +7 -5
- package/dist/data-sources/BackendWebsocketDataSource.mjs.map +1 -1
- package/dist/data-sources/PriceDataSource.cjs +17 -4
- package/dist/data-sources/PriceDataSource.cjs.map +1 -1
- package/dist/data-sources/PriceDataSource.d.cts +8 -4
- package/dist/data-sources/PriceDataSource.d.cts.map +1 -1
- package/dist/data-sources/PriceDataSource.d.mts +8 -4
- package/dist/data-sources/PriceDataSource.d.mts.map +1 -1
- package/dist/data-sources/PriceDataSource.mjs +17 -4
- package/dist/data-sources/PriceDataSource.mjs.map +1 -1
- package/dist/data-sources/RpcDataSource.cjs +123 -44
- package/dist/data-sources/RpcDataSource.cjs.map +1 -1
- package/dist/data-sources/RpcDataSource.d.cts +16 -62
- package/dist/data-sources/RpcDataSource.d.cts.map +1 -1
- package/dist/data-sources/RpcDataSource.d.mts +16 -62
- package/dist/data-sources/RpcDataSource.d.mts.map +1 -1
- package/dist/data-sources/RpcDataSource.mjs +124 -45
- package/dist/data-sources/RpcDataSource.mjs.map +1 -1
- package/dist/data-sources/SnapDataSource.cjs +22 -10
- package/dist/data-sources/SnapDataSource.cjs.map +1 -1
- package/dist/data-sources/SnapDataSource.d.cts +2 -1
- package/dist/data-sources/SnapDataSource.d.cts.map +1 -1
- package/dist/data-sources/SnapDataSource.d.mts +2 -1
- package/dist/data-sources/SnapDataSource.d.mts.map +1 -1
- package/dist/data-sources/SnapDataSource.mjs +22 -10
- package/dist/data-sources/SnapDataSource.mjs.map +1 -1
- package/dist/data-sources/StakedBalanceDataSource.cjs +597 -0
- package/dist/data-sources/StakedBalanceDataSource.cjs.map +1 -0
- package/dist/data-sources/StakedBalanceDataSource.d.cts +72 -0
- package/dist/data-sources/StakedBalanceDataSource.d.cts.map +1 -0
- package/dist/data-sources/StakedBalanceDataSource.d.mts +72 -0
- package/dist/data-sources/StakedBalanceDataSource.d.mts.map +1 -0
- package/dist/data-sources/StakedBalanceDataSource.mjs +593 -0
- package/dist/data-sources/StakedBalanceDataSource.mjs.map +1 -0
- package/dist/data-sources/TokenDataSource.cjs +12 -5
- package/dist/data-sources/TokenDataSource.cjs.map +1 -1
- package/dist/data-sources/TokenDataSource.d.cts +1 -0
- package/dist/data-sources/TokenDataSource.d.cts.map +1 -1
- package/dist/data-sources/TokenDataSource.d.mts +1 -0
- package/dist/data-sources/TokenDataSource.d.mts.map +1 -1
- package/dist/data-sources/TokenDataSource.mjs +12 -5
- package/dist/data-sources/TokenDataSource.mjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/index.cjs +5 -1
- package/dist/data-sources/evm-rpc-services/index.cjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/index.d.cts +1 -1
- package/dist/data-sources/evm-rpc-services/index.d.cts.map +1 -1
- package/dist/data-sources/evm-rpc-services/index.d.mts +1 -1
- package/dist/data-sources/evm-rpc-services/index.d.mts.map +1 -1
- package/dist/data-sources/evm-rpc-services/index.mjs +1 -1
- package/dist/data-sources/evm-rpc-services/index.mjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.cjs +132 -0
- package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.cjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.d.cts +80 -0
- package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.d.cts.map +1 -0
- package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.d.mts +80 -0
- package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.d.mts.map +1 -0
- package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.mjs +126 -0
- package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.mjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.cjs +16 -0
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.cjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.cts +5 -1
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.cts.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.mts +5 -1
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.mts.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.mjs +16 -0
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.mjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/index.cjs +6 -1
- package/dist/data-sources/evm-rpc-services/services/index.cjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/index.d.cts +1 -0
- package/dist/data-sources/evm-rpc-services/services/index.d.cts.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/index.d.mts +1 -0
- package/dist/data-sources/evm-rpc-services/services/index.d.mts.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/index.mjs +1 -0
- package/dist/data-sources/evm-rpc-services/services/index.mjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/types/services.cjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/types/services.d.cts +4 -0
- package/dist/data-sources/evm-rpc-services/types/services.d.cts.map +1 -1
- package/dist/data-sources/evm-rpc-services/types/services.d.mts +4 -0
- package/dist/data-sources/evm-rpc-services/types/services.d.mts.map +1 -1
- package/dist/data-sources/evm-rpc-services/types/services.mjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/types/state.cjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/types/state.d.cts +3 -3
- package/dist/data-sources/evm-rpc-services/types/state.d.cts.map +1 -1
- package/dist/data-sources/evm-rpc-services/types/state.d.mts +3 -3
- package/dist/data-sources/evm-rpc-services/types/state.d.mts.map +1 -1
- package/dist/data-sources/evm-rpc-services/types/state.mjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/utils/index.cjs +9 -1
- package/dist/data-sources/evm-rpc-services/utils/index.cjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/utils/index.d.cts +2 -0
- package/dist/data-sources/evm-rpc-services/utils/index.d.cts.map +1 -1
- package/dist/data-sources/evm-rpc-services/utils/index.d.mts +2 -0
- package/dist/data-sources/evm-rpc-services/utils/index.d.mts.map +1 -1
- package/dist/data-sources/evm-rpc-services/utils/index.mjs +2 -0
- package/dist/data-sources/evm-rpc-services/utils/index.mjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/utils/parsing.cjs +47 -0
- package/dist/data-sources/evm-rpc-services/utils/parsing.cjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/utils/parsing.d.cts +25 -0
- package/dist/data-sources/evm-rpc-services/utils/parsing.d.cts.map +1 -0
- package/dist/data-sources/evm-rpc-services/utils/parsing.d.mts +25 -0
- package/dist/data-sources/evm-rpc-services/utils/parsing.d.mts.map +1 -0
- package/dist/data-sources/evm-rpc-services/utils/parsing.mjs +39 -0
- package/dist/data-sources/evm-rpc-services/utils/parsing.mjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/utils/staking-contracts.cjs +68 -0
- package/dist/data-sources/evm-rpc-services/utils/staking-contracts.cjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.cts +25 -0
- package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.cts.map +1 -0
- package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.mts +25 -0
- package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.mts.map +1 -0
- package/dist/data-sources/evm-rpc-services/utils/staking-contracts.mjs +62 -0
- package/dist/data-sources/evm-rpc-services/utils/staking-contracts.mjs.map +1 -0
- package/dist/data-sources/index.cjs +3 -1
- package/dist/data-sources/index.cjs.map +1 -1
- package/dist/data-sources/index.d.cts +3 -2
- package/dist/data-sources/index.d.cts.map +1 -1
- package/dist/data-sources/index.d.mts +3 -2
- package/dist/data-sources/index.d.mts.map +1 -1
- package/dist/data-sources/index.mjs +1 -0
- package/dist/data-sources/index.mjs.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +3 -3
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/middlewares/DetectionMiddleware.cjs +4 -1
- package/dist/middlewares/DetectionMiddleware.cjs.map +1 -1
- package/dist/middlewares/DetectionMiddleware.d.cts +1 -0
- package/dist/middlewares/DetectionMiddleware.d.cts.map +1 -1
- package/dist/middlewares/DetectionMiddleware.d.mts +1 -0
- package/dist/middlewares/DetectionMiddleware.d.mts.map +1 -1
- package/dist/middlewares/DetectionMiddleware.mjs +4 -1
- package/dist/middlewares/DetectionMiddleware.mjs.map +1 -1
- package/dist/selectors/balance.cjs +2 -2
- package/dist/selectors/balance.cjs.map +1 -1
- package/dist/selectors/balance.d.cts.map +1 -1
- package/dist/selectors/balance.d.mts.map +1 -1
- package/dist/selectors/balance.mjs +2 -2
- package/dist/selectors/balance.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +3 -3
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +3 -3
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/package.json +17 -12
|
@@ -13,7 +13,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
13
13
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
14
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
15
|
};
|
|
16
|
-
var _RpcDataSource_instances, _RpcDataSource_messenger, _RpcDataSource_onActiveChainsUpdated, _RpcDataSource_timeout, _RpcDataSource_tokenDetectionEnabled, _RpcDataSource_activeChains, _RpcDataSource_chainStatuses, _RpcDataSource_providerCache, _RpcDataSource_activeSubscriptions, _RpcDataSource_multicallClient, _RpcDataSource_balanceFetcher, _RpcDataSource_tokenDetector, _RpcDataSource_convertToHumanReadable, _RpcDataSource_collectMetadataForBalances, _RpcDataSource_handleBalanceUpdate, _RpcDataSource_handleDetectionUpdate, _RpcDataSource_subscribeToNetworkController, _RpcDataSource_initializeFromNetworkController, _RpcDataSource_updateFromNetworkState, _RpcDataSource_getProvider, _RpcDataSource_getMulticallProvider, _RpcDataSource_clearProviderCache, _RpcDataSource_buildNativeAssetId, _RpcDataSource_getExistingAssetsMetadata, _RpcDataSource_getTokenMetadataFromTokenList;
|
|
16
|
+
var _RpcDataSource_instances, _RpcDataSource_messenger, _RpcDataSource_onActiveChainsUpdated, _RpcDataSource_timeout, _RpcDataSource_tokenDetectionEnabled, _RpcDataSource_useExternalService, _RpcDataSource_activeChains, _RpcDataSource_chainStatuses, _RpcDataSource_providerCache, _RpcDataSource_activeSubscriptions, _RpcDataSource_unsubscribeTransactionConfirmed, _RpcDataSource_unsubscribeIncomingTransactions, _RpcDataSource_multicallClient, _RpcDataSource_balanceFetcher, _RpcDataSource_tokenDetector, _RpcDataSource_convertToHumanReadable, _RpcDataSource_collectMetadataForBalances, _RpcDataSource_handleBalanceUpdate, _RpcDataSource_handleDetectionUpdate, _RpcDataSource_subscribeToNetworkController, _RpcDataSource_subscribeToTransactionEvents, _RpcDataSource_onTransactionConfirmed, _RpcDataSource_onIncomingTransactions, _RpcDataSource_refreshBalanceForChains, _RpcDataSource_initializeFromNetworkController, _RpcDataSource_updateFromNetworkState, _RpcDataSource_getProvider, _RpcDataSource_getMulticallProvider, _RpcDataSource_clearProviderCache, _RpcDataSource_buildNativeAssetId, _RpcDataSource_getExistingAssetsMetadata, _RpcDataSource_getTokenMetadataFromTokenList;
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
exports.createRpcDataSource = exports.RpcDataSource = exports.caipChainIdToHex = void 0;
|
|
19
19
|
const providers_1 = require("@ethersproject/providers");
|
|
@@ -69,6 +69,7 @@ class RpcDataSource extends AbstractDataSource_1.AbstractDataSource {
|
|
|
69
69
|
_RpcDataSource_onActiveChainsUpdated.set(this, void 0);
|
|
70
70
|
_RpcDataSource_timeout.set(this, void 0);
|
|
71
71
|
_RpcDataSource_tokenDetectionEnabled.set(this, void 0);
|
|
72
|
+
_RpcDataSource_useExternalService.set(this, void 0);
|
|
72
73
|
/** Currently active chains */
|
|
73
74
|
_RpcDataSource_activeChains.set(this, []);
|
|
74
75
|
/** Network status for each active chain */
|
|
@@ -77,6 +78,8 @@ class RpcDataSource extends AbstractDataSource_1.AbstractDataSource {
|
|
|
77
78
|
_RpcDataSource_providerCache.set(this, new Map());
|
|
78
79
|
/** Active subscriptions by ID */
|
|
79
80
|
_RpcDataSource_activeSubscriptions.set(this, new Map());
|
|
81
|
+
_RpcDataSource_unsubscribeTransactionConfirmed.set(this, undefined);
|
|
82
|
+
_RpcDataSource_unsubscribeIncomingTransactions.set(this, undefined);
|
|
80
83
|
// Rpc-datasource components
|
|
81
84
|
_RpcDataSource_multicallClient.set(this, void 0);
|
|
82
85
|
_RpcDataSource_balanceFetcher.set(this, void 0);
|
|
@@ -84,14 +87,16 @@ class RpcDataSource extends AbstractDataSource_1.AbstractDataSource {
|
|
|
84
87
|
__classPrivateFieldSet(this, _RpcDataSource_messenger, options.messenger, "f");
|
|
85
88
|
__classPrivateFieldSet(this, _RpcDataSource_onActiveChainsUpdated, options.onActiveChainsUpdated, "f");
|
|
86
89
|
__classPrivateFieldSet(this, _RpcDataSource_timeout, options.timeout ?? 10000, "f");
|
|
87
|
-
__classPrivateFieldSet(this, _RpcDataSource_tokenDetectionEnabled, options.tokenDetectionEnabled ??
|
|
90
|
+
__classPrivateFieldSet(this, _RpcDataSource_tokenDetectionEnabled, options.tokenDetectionEnabled ?? (() => true), "f");
|
|
91
|
+
__classPrivateFieldSet(this, _RpcDataSource_useExternalService, options.useExternalService ?? (() => true), "f");
|
|
88
92
|
const balanceInterval = options.balanceInterval ?? DEFAULT_BALANCE_INTERVAL;
|
|
89
93
|
const detectionInterval = options.detectionInterval ?? DEFAULT_DETECTION_INTERVAL;
|
|
90
94
|
log('Initializing RpcDataSource', {
|
|
91
95
|
timeout: __classPrivateFieldGet(this, _RpcDataSource_timeout, "f"),
|
|
92
96
|
balanceInterval,
|
|
93
97
|
detectionInterval,
|
|
94
|
-
tokenDetectionEnabled: __classPrivateFieldGet(this, _RpcDataSource_tokenDetectionEnabled, "f"),
|
|
98
|
+
tokenDetectionEnabled: __classPrivateFieldGet(this, _RpcDataSource_tokenDetectionEnabled, "f").call(this),
|
|
99
|
+
useExternalService: __classPrivateFieldGet(this, _RpcDataSource_useExternalService, "f").call(this),
|
|
95
100
|
});
|
|
96
101
|
// Initialize MulticallClient with a provider getter
|
|
97
102
|
__classPrivateFieldSet(this, _RpcDataSource_multicallClient, new evm_rpc_services_1.MulticallClient((hexChainId) => {
|
|
@@ -115,9 +120,14 @@ class RpcDataSource extends AbstractDataSource_1.AbstractDataSource {
|
|
|
115
120
|
__classPrivateFieldSet(this, _RpcDataSource_balanceFetcher, new evm_rpc_services_1.BalanceFetcher(__classPrivateFieldGet(this, _RpcDataSource_multicallClient, "f"), balanceFetcherMessenger, { pollingInterval: balanceInterval }), "f");
|
|
116
121
|
__classPrivateFieldGet(this, _RpcDataSource_balanceFetcher, "f").setOnBalanceUpdate(__classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_handleBalanceUpdate).bind(this));
|
|
117
122
|
// Initialize TokenDetector with polling interval
|
|
118
|
-
__classPrivateFieldSet(this, _RpcDataSource_tokenDetector, new evm_rpc_services_1.TokenDetector(__classPrivateFieldGet(this, _RpcDataSource_multicallClient, "f"), tokenDetectorMessenger, {
|
|
123
|
+
__classPrivateFieldSet(this, _RpcDataSource_tokenDetector, new evm_rpc_services_1.TokenDetector(__classPrivateFieldGet(this, _RpcDataSource_multicallClient, "f"), tokenDetectorMessenger, {
|
|
124
|
+
pollingInterval: detectionInterval,
|
|
125
|
+
tokenDetectionEnabled: __classPrivateFieldGet(this, _RpcDataSource_tokenDetectionEnabled, "f"),
|
|
126
|
+
useExternalService: __classPrivateFieldGet(this, _RpcDataSource_useExternalService, "f"),
|
|
127
|
+
}), "f");
|
|
119
128
|
__classPrivateFieldGet(this, _RpcDataSource_tokenDetector, "f").setOnDetectionUpdate(__classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_handleDetectionUpdate).bind(this));
|
|
120
129
|
__classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_subscribeToNetworkController).call(this);
|
|
130
|
+
__classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_subscribeToTransactionEvents).call(this);
|
|
121
131
|
__classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_initializeFromNetworkController).call(this);
|
|
122
132
|
}
|
|
123
133
|
/**
|
|
@@ -189,7 +199,7 @@ class RpcDataSource extends AbstractDataSource_1.AbstractDataSource {
|
|
|
189
199
|
return response;
|
|
190
200
|
}
|
|
191
201
|
const assetsBalance = {};
|
|
192
|
-
const
|
|
202
|
+
const assetsInfo = {};
|
|
193
203
|
const failedChains = [];
|
|
194
204
|
// Fetch balances for each account and its supported chains (pre-computed in request)
|
|
195
205
|
for (const { account, supportedChains, } of request.accountsWithSupportedChains) {
|
|
@@ -209,10 +219,10 @@ class RpcDataSource extends AbstractDataSource_1.AbstractDataSource {
|
|
|
209
219
|
}
|
|
210
220
|
// Collect metadata for all balances
|
|
211
221
|
const balanceMetadata = __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_collectMetadataForBalances).call(this, result.balances, chainId);
|
|
212
|
-
Object.assign(
|
|
222
|
+
Object.assign(assetsInfo, balanceMetadata);
|
|
213
223
|
// Convert balances to human-readable format
|
|
214
224
|
for (const balance of result.balances) {
|
|
215
|
-
const metadata =
|
|
225
|
+
const metadata = assetsInfo[balance.assetId];
|
|
216
226
|
// Default to 18 decimals (ERC20 standard) for consistent human-readable format
|
|
217
227
|
const decimals = metadata?.decimals ?? 18;
|
|
218
228
|
const humanReadableAmount = __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_convertToHumanReadable).call(this, balance.balance, decimals);
|
|
@@ -231,7 +241,7 @@ class RpcDataSource extends AbstractDataSource_1.AbstractDataSource {
|
|
|
231
241
|
// Even on error, include native token metadata
|
|
232
242
|
const chainStatus = __classPrivateFieldGet(this, _RpcDataSource_chainStatuses, "f")[chainId];
|
|
233
243
|
if (chainStatus) {
|
|
234
|
-
|
|
244
|
+
assetsInfo[nativeAssetId] = {
|
|
235
245
|
type: 'native',
|
|
236
246
|
symbol: chainStatus.nativeCurrency,
|
|
237
247
|
name: chainStatus.nativeCurrency,
|
|
@@ -262,8 +272,8 @@ class RpcDataSource extends AbstractDataSource_1.AbstractDataSource {
|
|
|
262
272
|
}
|
|
263
273
|
response.assetsBalance = assetsBalance;
|
|
264
274
|
// Include metadata for native tokens if we have any
|
|
265
|
-
if (Object.keys(
|
|
266
|
-
response.
|
|
275
|
+
if (Object.keys(assetsInfo).length > 0) {
|
|
276
|
+
response.assetsInfo = assetsInfo;
|
|
267
277
|
}
|
|
268
278
|
return response;
|
|
269
279
|
}
|
|
@@ -275,14 +285,17 @@ class RpcDataSource extends AbstractDataSource_1.AbstractDataSource {
|
|
|
275
285
|
* @returns Promise resolving to a DataResponse with detected assets.
|
|
276
286
|
*/
|
|
277
287
|
async detectTokens(chainId, account) {
|
|
278
|
-
if (!__classPrivateFieldGet(this, _RpcDataSource_tokenDetectionEnabled, "f")) {
|
|
288
|
+
if (!__classPrivateFieldGet(this, _RpcDataSource_tokenDetectionEnabled, "f").call(this) || !__classPrivateFieldGet(this, _RpcDataSource_useExternalService, "f").call(this)) {
|
|
279
289
|
return {};
|
|
280
290
|
}
|
|
281
291
|
const hexChainId = (0, exports.caipChainIdToHex)(chainId);
|
|
282
292
|
const { address, id: accountId } = account;
|
|
283
293
|
log('Running token detection', { chainId, accountId });
|
|
284
294
|
try {
|
|
285
|
-
const result = await __classPrivateFieldGet(this, _RpcDataSource_tokenDetector, "f").detectTokens(hexChainId, accountId, address
|
|
295
|
+
const result = await __classPrivateFieldGet(this, _RpcDataSource_tokenDetector, "f").detectTokens(hexChainId, accountId, address, {
|
|
296
|
+
tokenDetectionEnabled: __classPrivateFieldGet(this, _RpcDataSource_tokenDetectionEnabled, "f").call(this),
|
|
297
|
+
useExternalService: __classPrivateFieldGet(this, _RpcDataSource_useExternalService, "f").call(this),
|
|
298
|
+
});
|
|
286
299
|
if (result.detectedAssets.length === 0) {
|
|
287
300
|
log('No new tokens detected');
|
|
288
301
|
return {};
|
|
@@ -294,11 +307,11 @@ class RpcDataSource extends AbstractDataSource_1.AbstractDataSource {
|
|
|
294
307
|
});
|
|
295
308
|
// Convert detected assets to DataResponse format
|
|
296
309
|
const balances = {};
|
|
297
|
-
const
|
|
310
|
+
const assetsInfo = {};
|
|
298
311
|
// Build metadata from detected assets
|
|
299
312
|
for (const asset of result.detectedAssets) {
|
|
300
313
|
if (asset.symbol && asset.decimals !== undefined) {
|
|
301
|
-
|
|
314
|
+
assetsInfo[asset.assetId] = {
|
|
302
315
|
type: 'erc20',
|
|
303
316
|
symbol: asset.symbol,
|
|
304
317
|
name: asset.name ?? asset.symbol,
|
|
@@ -326,8 +339,8 @@ class RpcDataSource extends AbstractDataSource_1.AbstractDataSource {
|
|
|
326
339
|
},
|
|
327
340
|
};
|
|
328
341
|
// Include metadata if we have any
|
|
329
|
-
if (Object.keys(
|
|
330
|
-
response.
|
|
342
|
+
if (Object.keys(assetsInfo).length > 0) {
|
|
343
|
+
response.assetsInfo = assetsInfo;
|
|
331
344
|
}
|
|
332
345
|
return response;
|
|
333
346
|
}
|
|
@@ -363,11 +376,11 @@ class RpcDataSource extends AbstractDataSource_1.AbstractDataSource {
|
|
|
363
376
|
};
|
|
364
377
|
}
|
|
365
378
|
}
|
|
366
|
-
if (response.
|
|
367
|
-
(_c = context.response).
|
|
368
|
-
context.response.
|
|
369
|
-
...context.response.
|
|
370
|
-
...response.
|
|
379
|
+
if (response.assetsInfo) {
|
|
380
|
+
(_c = context.response).assetsInfo ?? (_c.assetsInfo = {});
|
|
381
|
+
context.response.assetsInfo = {
|
|
382
|
+
...context.response.assetsInfo,
|
|
383
|
+
...response.assetsInfo,
|
|
371
384
|
};
|
|
372
385
|
}
|
|
373
386
|
const failedChains = new Set(Object.keys(response.errors ?? {}));
|
|
@@ -437,8 +450,8 @@ class RpcDataSource extends AbstractDataSource_1.AbstractDataSource {
|
|
|
437
450
|
};
|
|
438
451
|
const balanceToken = __classPrivateFieldGet(this, _RpcDataSource_balanceFetcher, "f").startPolling(balanceInput);
|
|
439
452
|
balancePollingTokens.push(balanceToken);
|
|
440
|
-
// Start detection polling if enabled
|
|
441
|
-
if (__classPrivateFieldGet(this, _RpcDataSource_tokenDetectionEnabled, "f")) {
|
|
453
|
+
// Start detection polling if enabled and external services allowed
|
|
454
|
+
if (__classPrivateFieldGet(this, _RpcDataSource_tokenDetectionEnabled, "f").call(this) && __classPrivateFieldGet(this, _RpcDataSource_useExternalService, "f").call(this)) {
|
|
442
455
|
const detectionInput = {
|
|
443
456
|
chainId: hexChainId,
|
|
444
457
|
accountId,
|
|
@@ -490,6 +503,8 @@ class RpcDataSource extends AbstractDataSource_1.AbstractDataSource {
|
|
|
490
503
|
*/
|
|
491
504
|
destroy() {
|
|
492
505
|
log('Destroying RpcDataSource');
|
|
506
|
+
__classPrivateFieldGet(this, _RpcDataSource_unsubscribeTransactionConfirmed, "f")?.call(this);
|
|
507
|
+
__classPrivateFieldGet(this, _RpcDataSource_unsubscribeIncomingTransactions, "f")?.call(this);
|
|
493
508
|
// Stop all polling
|
|
494
509
|
__classPrivateFieldGet(this, _RpcDataSource_balanceFetcher, "f").stopAllPolling();
|
|
495
510
|
__classPrivateFieldGet(this, _RpcDataSource_tokenDetector, "f").stopAllPolling();
|
|
@@ -500,19 +515,19 @@ class RpcDataSource extends AbstractDataSource_1.AbstractDataSource {
|
|
|
500
515
|
}
|
|
501
516
|
}
|
|
502
517
|
exports.RpcDataSource = RpcDataSource;
|
|
503
|
-
_RpcDataSource_messenger = new WeakMap(), _RpcDataSource_onActiveChainsUpdated = new WeakMap(), _RpcDataSource_timeout = new WeakMap(), _RpcDataSource_tokenDetectionEnabled = new WeakMap(), _RpcDataSource_activeChains = new WeakMap(), _RpcDataSource_chainStatuses = new WeakMap(), _RpcDataSource_providerCache = new WeakMap(), _RpcDataSource_activeSubscriptions = new WeakMap(), _RpcDataSource_multicallClient = new WeakMap(), _RpcDataSource_balanceFetcher = new WeakMap(), _RpcDataSource_tokenDetector = new WeakMap(), _RpcDataSource_instances = new WeakSet(), _RpcDataSource_convertToHumanReadable = function _RpcDataSource_convertToHumanReadable(rawBalance, decimals) {
|
|
518
|
+
_RpcDataSource_messenger = new WeakMap(), _RpcDataSource_onActiveChainsUpdated = new WeakMap(), _RpcDataSource_timeout = new WeakMap(), _RpcDataSource_tokenDetectionEnabled = new WeakMap(), _RpcDataSource_useExternalService = new WeakMap(), _RpcDataSource_activeChains = new WeakMap(), _RpcDataSource_chainStatuses = new WeakMap(), _RpcDataSource_providerCache = new WeakMap(), _RpcDataSource_activeSubscriptions = new WeakMap(), _RpcDataSource_unsubscribeTransactionConfirmed = new WeakMap(), _RpcDataSource_unsubscribeIncomingTransactions = new WeakMap(), _RpcDataSource_multicallClient = new WeakMap(), _RpcDataSource_balanceFetcher = new WeakMap(), _RpcDataSource_tokenDetector = new WeakMap(), _RpcDataSource_instances = new WeakSet(), _RpcDataSource_convertToHumanReadable = function _RpcDataSource_convertToHumanReadable(rawBalance, decimals) {
|
|
504
519
|
const rawAmount = new bignumber_js_1.default(rawBalance);
|
|
505
520
|
const divisor = new bignumber_js_1.default(10).pow(decimals);
|
|
506
521
|
return rawAmount.dividedBy(divisor).toString();
|
|
507
522
|
}, _RpcDataSource_collectMetadataForBalances = function _RpcDataSource_collectMetadataForBalances(balances, chainId) {
|
|
508
|
-
const
|
|
523
|
+
const assetsInfo = {};
|
|
509
524
|
const existingMetadata = __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_getExistingAssetsMetadata).call(this);
|
|
510
525
|
for (const balance of balances) {
|
|
511
526
|
const isNative = balance.assetId.includes('/slip44:');
|
|
512
527
|
if (isNative) {
|
|
513
528
|
const chainStatus = __classPrivateFieldGet(this, _RpcDataSource_chainStatuses, "f")[chainId];
|
|
514
529
|
if (chainStatus) {
|
|
515
|
-
|
|
530
|
+
assetsInfo[balance.assetId] = {
|
|
516
531
|
type: 'native',
|
|
517
532
|
symbol: chainStatus.nativeCurrency,
|
|
518
533
|
name: chainStatus.nativeCurrency,
|
|
@@ -524,19 +539,19 @@ _RpcDataSource_messenger = new WeakMap(), _RpcDataSource_onActiveChainsUpdated =
|
|
|
524
539
|
// For ERC20 tokens, try existing metadata from state first
|
|
525
540
|
const existingMeta = existingMetadata[balance.assetId];
|
|
526
541
|
if (existingMeta) {
|
|
527
|
-
|
|
542
|
+
assetsInfo[balance.assetId] = existingMeta;
|
|
528
543
|
}
|
|
529
544
|
else {
|
|
530
545
|
// Fallback to token list if not in state
|
|
531
546
|
const tokenListMeta = __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_getTokenMetadataFromTokenList).call(this, balance.assetId);
|
|
532
547
|
if (tokenListMeta) {
|
|
533
|
-
|
|
548
|
+
assetsInfo[balance.assetId] = tokenListMeta;
|
|
534
549
|
}
|
|
535
550
|
else {
|
|
536
551
|
// Default metadata for unknown ERC20 tokens.
|
|
537
552
|
// Use 18 decimals (the standard for most ERC20 tokens)
|
|
538
553
|
// to ensure consistent human-readable balance format.
|
|
539
|
-
|
|
554
|
+
assetsInfo[balance.assetId] = {
|
|
540
555
|
type: 'erc20',
|
|
541
556
|
symbol: '',
|
|
542
557
|
name: '',
|
|
@@ -546,17 +561,17 @@ _RpcDataSource_messenger = new WeakMap(), _RpcDataSource_onActiveChainsUpdated =
|
|
|
546
561
|
}
|
|
547
562
|
}
|
|
548
563
|
}
|
|
549
|
-
return
|
|
564
|
+
return assetsInfo;
|
|
550
565
|
}, _RpcDataSource_handleBalanceUpdate = function _RpcDataSource_handleBalanceUpdate(result) {
|
|
551
566
|
const newBalances = {};
|
|
552
567
|
// Convert hex chain ID to CAIP-2 format
|
|
553
568
|
const chainIdDecimal = parseInt(result.chainId, 16);
|
|
554
569
|
const caipChainId = `eip155:${chainIdDecimal}`;
|
|
555
570
|
// Collect metadata for all balances
|
|
556
|
-
const
|
|
571
|
+
const assetsInfo = __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_collectMetadataForBalances).call(this, result.balances, caipChainId);
|
|
557
572
|
// Convert balances to human-readable format using metadata
|
|
558
573
|
for (const balance of result.balances) {
|
|
559
|
-
const metadata =
|
|
574
|
+
const metadata = assetsInfo[balance.assetId];
|
|
560
575
|
// Default to 18 decimals (ERC20 standard) for consistent human-readable format
|
|
561
576
|
const decimals = metadata?.decimals ?? 18;
|
|
562
577
|
const humanReadableAmount = __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_convertToHumanReadable).call(this, balance.balance, decimals);
|
|
@@ -570,7 +585,7 @@ _RpcDataSource_messenger = new WeakMap(), _RpcDataSource_onActiveChainsUpdated =
|
|
|
570
585
|
assetsBalance: {
|
|
571
586
|
[result.accountId]: newBalances,
|
|
572
587
|
},
|
|
573
|
-
|
|
588
|
+
assetsInfo,
|
|
574
589
|
};
|
|
575
590
|
log('Balance update response', {
|
|
576
591
|
accountId: result.accountId,
|
|
@@ -621,7 +636,7 @@ _RpcDataSource_messenger = new WeakMap(), _RpcDataSource_onActiveChainsUpdated =
|
|
|
621
636
|
detectedAssets: {
|
|
622
637
|
[result.accountId]: result.detectedAssets.map((asset) => asset.assetId),
|
|
623
638
|
},
|
|
624
|
-
|
|
639
|
+
assetsInfo: newMetadata,
|
|
625
640
|
assetsBalance: {
|
|
626
641
|
[result.accountId]: newBalances,
|
|
627
642
|
},
|
|
@@ -637,6 +652,73 @@ _RpcDataSource_messenger = new WeakMap(), _RpcDataSource_onActiveChainsUpdated =
|
|
|
637
652
|
__classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_clearProviderCache).call(this);
|
|
638
653
|
__classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_updateFromNetworkState).call(this, networkState);
|
|
639
654
|
});
|
|
655
|
+
}, _RpcDataSource_subscribeToTransactionEvents = function _RpcDataSource_subscribeToTransactionEvents() {
|
|
656
|
+
const unsubConfirmed = __classPrivateFieldGet(this, _RpcDataSource_messenger, "f").subscribe('TransactionController:transactionConfirmed', __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_onTransactionConfirmed).bind(this));
|
|
657
|
+
__classPrivateFieldSet(this, _RpcDataSource_unsubscribeTransactionConfirmed, typeof unsubConfirmed === 'function' ? unsubConfirmed : undefined, "f");
|
|
658
|
+
const unsubIncoming = __classPrivateFieldGet(this, _RpcDataSource_messenger, "f").subscribe('TransactionController:incomingTransactionsReceived', __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_onIncomingTransactions).bind(this));
|
|
659
|
+
__classPrivateFieldSet(this, _RpcDataSource_unsubscribeIncomingTransactions, typeof unsubIncoming === 'function' ? unsubIncoming : undefined, "f");
|
|
660
|
+
}, _RpcDataSource_onTransactionConfirmed = function _RpcDataSource_onTransactionConfirmed(payload) {
|
|
661
|
+
const hexChainId = payload?.chainId;
|
|
662
|
+
if (!hexChainId) {
|
|
663
|
+
return;
|
|
664
|
+
}
|
|
665
|
+
const caipChainId = `eip155:${parseInt(hexChainId, 16)}`;
|
|
666
|
+
__classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_refreshBalanceForChains).call(this, [caipChainId]).catch((error) => {
|
|
667
|
+
log('Failed to refresh balance after transaction confirmed', { error });
|
|
668
|
+
});
|
|
669
|
+
}, _RpcDataSource_onIncomingTransactions = function _RpcDataSource_onIncomingTransactions(payload) {
|
|
670
|
+
const chainIds = Array.from(new Set((payload ?? [])
|
|
671
|
+
.map((item) => item?.chainId)
|
|
672
|
+
.filter((id) => Boolean(id))));
|
|
673
|
+
const caipChainIds = chainIds.map((hexChainId) => `eip155:${parseInt(hexChainId, 16)}`);
|
|
674
|
+
const toRefresh = caipChainIds.length > 0 ? caipChainIds : [...__classPrivateFieldGet(this, _RpcDataSource_activeChains, "f")];
|
|
675
|
+
__classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_refreshBalanceForChains).call(this, toRefresh).catch((error) => {
|
|
676
|
+
log('Failed to refresh balance after incoming transactions', { error });
|
|
677
|
+
});
|
|
678
|
+
}, _RpcDataSource_refreshBalanceForChains =
|
|
679
|
+
/**
|
|
680
|
+
* Fetch balances for the given chains across all active subscriptions and
|
|
681
|
+
* push updates to the controller.
|
|
682
|
+
*
|
|
683
|
+
* @param chainIds - CAIP-2 chain IDs to refresh.
|
|
684
|
+
*/
|
|
685
|
+
async function _RpcDataSource_refreshBalanceForChains(chainIds) {
|
|
686
|
+
const chainIdsSet = new Set(chainIds);
|
|
687
|
+
const chainsToFetch = chainIds.filter((chainId) => __classPrivateFieldGet(this, _RpcDataSource_activeChains, "f").includes(chainId));
|
|
688
|
+
if (chainsToFetch.length === 0) {
|
|
689
|
+
return;
|
|
690
|
+
}
|
|
691
|
+
for (const subscription of __classPrivateFieldGet(this, _RpcDataSource_activeSubscriptions, "f").values()) {
|
|
692
|
+
const subscriptionChains = subscription.chains.filter((chainId) => chainIdsSet.has(chainId));
|
|
693
|
+
if (subscriptionChains.length === 0) {
|
|
694
|
+
continue;
|
|
695
|
+
}
|
|
696
|
+
const request = {
|
|
697
|
+
accountsWithSupportedChains: subscription.accounts.map((account) => ({
|
|
698
|
+
account,
|
|
699
|
+
supportedChains: subscriptionChains,
|
|
700
|
+
})),
|
|
701
|
+
chainIds: subscriptionChains,
|
|
702
|
+
dataTypes: ['balance'],
|
|
703
|
+
};
|
|
704
|
+
try {
|
|
705
|
+
const response = await this.fetch(request);
|
|
706
|
+
if (response.assetsBalance &&
|
|
707
|
+
Object.keys(response.assetsBalance).length > 0) {
|
|
708
|
+
subscription.onAssetsUpdate(response)?.catch((error) => {
|
|
709
|
+
log('Failed to report balance update after transaction', {
|
|
710
|
+
error,
|
|
711
|
+
});
|
|
712
|
+
});
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
catch (error) {
|
|
716
|
+
log('Failed to fetch balance after transaction', {
|
|
717
|
+
chains: subscriptionChains,
|
|
718
|
+
error,
|
|
719
|
+
});
|
|
720
|
+
}
|
|
721
|
+
}
|
|
640
722
|
}, _RpcDataSource_initializeFromNetworkController = function _RpcDataSource_initializeFromNetworkController() {
|
|
641
723
|
log('Initializing from NetworkController');
|
|
642
724
|
try {
|
|
@@ -734,12 +816,11 @@ _RpcDataSource_messenger = new WeakMap(), _RpcDataSource_onActiveChainsUpdated =
|
|
|
734
816
|
__classPrivateFieldGet(this, _RpcDataSource_providerCache, "f").clear();
|
|
735
817
|
}, _RpcDataSource_buildNativeAssetId = function _RpcDataSource_buildNativeAssetId(chainId) {
|
|
736
818
|
const { nativeAssetIdentifiers } = __classPrivateFieldGet(this, _RpcDataSource_messenger, "f").call('NetworkEnablementController:getState');
|
|
737
|
-
return
|
|
738
|
-
`${chainId}/slip44:60`);
|
|
819
|
+
return nativeAssetIdentifiers[chainId] ?? `${chainId}/slip44:60`;
|
|
739
820
|
}, _RpcDataSource_getExistingAssetsMetadata = function _RpcDataSource_getExistingAssetsMetadata() {
|
|
740
821
|
try {
|
|
741
822
|
const state = __classPrivateFieldGet(this, _RpcDataSource_messenger, "f").call('AssetsController:getState');
|
|
742
|
-
return
|
|
823
|
+
return state.assetsInfo ?? {};
|
|
743
824
|
}
|
|
744
825
|
catch {
|
|
745
826
|
// If AssetsController:getState fails, return empty metadata
|
|
@@ -747,15 +828,13 @@ _RpcDataSource_messenger = new WeakMap(), _RpcDataSource_onActiveChainsUpdated =
|
|
|
747
828
|
}
|
|
748
829
|
}, _RpcDataSource_getTokenMetadataFromTokenList = function _RpcDataSource_getTokenMetadataFromTokenList(assetId) {
|
|
749
830
|
try {
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
const [chainPart, assetPart] = assetId.split('/');
|
|
753
|
-
if (!assetPart?.startsWith('erc20:')) {
|
|
831
|
+
const parsed = (0, utils_1.parseCaipAssetType)(assetId);
|
|
832
|
+
if (parsed.assetNamespace !== 'erc20') {
|
|
754
833
|
return undefined;
|
|
755
834
|
}
|
|
756
|
-
const tokenAddress =
|
|
757
|
-
const
|
|
758
|
-
const hexChainId =
|
|
835
|
+
const tokenAddress = parsed.assetReference;
|
|
836
|
+
const { reference } = (0, utils_1.parseCaipChainId)(parsed.chainId);
|
|
837
|
+
const hexChainId = (0, utils_1.numberToHex)(parseInt(reference, 10));
|
|
759
838
|
const tokenListState = __classPrivateFieldGet(this, _RpcDataSource_messenger, "f").call('TokenListController:getState');
|
|
760
839
|
const chainCacheEntry = tokenListState?.tokensChainsCache?.[hexChainId];
|
|
761
840
|
const chainTokenList = chainCacheEntry?.data;
|