@metamask-previews/assets-controller 14.0.3-preview-e12b5ece6 → 14.0.3-preview-fe4b3be11
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 +5 -10
- package/dist/AssetsController.cjs +592 -273
- package/dist/AssetsController.cjs.map +1 -1
- package/dist/AssetsController.d.cts +7 -10
- package/dist/AssetsController.d.cts.map +1 -1
- package/dist/AssetsController.d.mts +7 -10
- package/dist/AssetsController.d.mts.map +1 -1
- package/dist/AssetsController.mjs +592 -273
- package/dist/AssetsController.mjs.map +1 -1
- package/dist/data-sources/AbstractDataSource.cjs +23 -0
- package/dist/data-sources/AbstractDataSource.cjs.map +1 -1
- package/dist/data-sources/AbstractDataSource.d.cts +13 -1
- package/dist/data-sources/AbstractDataSource.d.cts.map +1 -1
- package/dist/data-sources/AbstractDataSource.d.mts +13 -1
- package/dist/data-sources/AbstractDataSource.d.mts.map +1 -1
- package/dist/data-sources/AbstractDataSource.mjs +23 -0
- package/dist/data-sources/AbstractDataSource.mjs.map +1 -1
- package/dist/data-sources/AccountActivityDataSource.cjs +2 -0
- package/dist/data-sources/AccountActivityDataSource.cjs.map +1 -1
- package/dist/data-sources/AccountActivityDataSource.d.cts.map +1 -1
- package/dist/data-sources/AccountActivityDataSource.d.mts.map +1 -1
- package/dist/data-sources/AccountActivityDataSource.mjs +2 -0
- package/dist/data-sources/AccountActivityDataSource.mjs.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.cjs +144 -31
- package/dist/data-sources/AccountsApiDataSource.cjs.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.d.cts +18 -2
- package/dist/data-sources/AccountsApiDataSource.d.cts.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.d.mts +18 -2
- package/dist/data-sources/AccountsApiDataSource.d.mts.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.mjs +145 -32
- package/dist/data-sources/AccountsApiDataSource.mjs.map +1 -1
- package/dist/data-sources/RpcDataSource.cjs +163 -24
- package/dist/data-sources/RpcDataSource.cjs.map +1 -1
- package/dist/data-sources/RpcDataSource.d.cts +17 -0
- package/dist/data-sources/RpcDataSource.d.cts.map +1 -1
- package/dist/data-sources/RpcDataSource.d.mts +17 -0
- package/dist/data-sources/RpcDataSource.d.mts.map +1 -1
- package/dist/data-sources/RpcDataSource.mjs +164 -25
- package/dist/data-sources/RpcDataSource.mjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.cjs +21 -12
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.cjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.cts +7 -2
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.cts.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.mts +7 -2
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.mts.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.mjs +21 -12
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.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 -2
- 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 -2
- 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/middlewares/ParallelMiddleware.cjs +9 -0
- package/dist/middlewares/ParallelMiddleware.cjs.map +1 -1
- package/dist/middlewares/ParallelMiddleware.d.cts.map +1 -1
- package/dist/middlewares/ParallelMiddleware.d.mts.map +1 -1
- package/dist/middlewares/ParallelMiddleware.mjs +9 -0
- package/dist/middlewares/ParallelMiddleware.mjs.map +1 -1
- package/dist/middlewares/RpcFallbackMiddleware.cjs +158 -128
- package/dist/middlewares/RpcFallbackMiddleware.cjs.map +1 -1
- package/dist/middlewares/RpcFallbackMiddleware.d.cts +10 -14
- package/dist/middlewares/RpcFallbackMiddleware.d.cts.map +1 -1
- package/dist/middlewares/RpcFallbackMiddleware.d.mts +10 -14
- package/dist/middlewares/RpcFallbackMiddleware.d.mts.map +1 -1
- package/dist/middlewares/RpcFallbackMiddleware.mjs +158 -128
- package/dist/middlewares/RpcFallbackMiddleware.mjs.map +1 -1
- package/dist/selectors/balance.cjs +4 -9
- 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 +4 -9
- package/dist/selectors/balance.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +28 -26
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +28 -26
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/package.json +4 -4
|
@@ -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_getNativeAssetForChain, _RpcDataSource_timeout, _RpcDataSource_tokenDetectionEnabled, _RpcDataSource_useExternalService, _RpcDataSource_isOnboarded, _RpcDataSource_activeChains, _RpcDataSource_chainStatuses, _RpcDataSource_providerCache, _RpcDataSource_activeSubscriptions, _RpcDataSource_unsubscribeTransactionConfirmed, _RpcDataSource_multicallClient, _RpcDataSource_balanceFetcher, _RpcDataSource_tokenDetector, _RpcDataSource_getAssetType, _RpcDataSource_convertToHumanReadable, _RpcDataSource_collectMetadataForBalances, _RpcDataSource_hasValidDecimals, _RpcDataSource_pickValidDecimals, _RpcDataSource_handleBalanceUpdate, _RpcDataSource_handleDetectionUpdate, _RpcDataSource_subscribeToNetworkController, _RpcDataSource_subscribeToTransactionEvents, _RpcDataSource_onTransactionConfirmed, _RpcDataSource_refreshBalanceForChains, _RpcDataSource_initializeFromNetworkController, _RpcDataSource_updateFromNetworkState, _RpcDataSource_getProvider, _RpcDataSource_getMulticallProvider, _RpcDataSource_clearProviderCache, _RpcDataSource_fetchDecimalsViaRpc, _RpcDataSource_getExistingAssetsMetadata;
|
|
16
|
+
var _RpcDataSource_instances, _RpcDataSource_messenger, _RpcDataSource_onActiveChainsUpdated, _RpcDataSource_getNativeAssetForChain, _RpcDataSource_timeout, _RpcDataSource_tokenDetectionEnabled, _RpcDataSource_useExternalService, _RpcDataSource_isOnboarded, _RpcDataSource_isBalanceV6Enabled, _RpcDataSource_activeChains, _RpcDataSource_chainStatuses, _RpcDataSource_providerCache, _RpcDataSource_activeSubscriptions, _RpcDataSource_unsubscribeTransactionConfirmed, _RpcDataSource_multicallClient, _RpcDataSource_balanceFetcher, _RpcDataSource_tokenDetector, _RpcDataSource_getAssetType, _RpcDataSource_convertToHumanReadable, _RpcDataSource_collectMetadataForBalances, _RpcDataSource_hasValidDecimals, _RpcDataSource_pickValidDecimals, _RpcDataSource_handleBalanceUpdate, _RpcDataSource_handleDetectionUpdate, _RpcDataSource_subscribeToNetworkController, _RpcDataSource_subscribeToTransactionEvents, _RpcDataSource_onTransactionConfirmed, _RpcDataSource_refreshBalanceForChains, _RpcDataSource_initializeFromNetworkController, _RpcDataSource_updateFromNetworkState, _RpcDataSource_getProvider, _RpcDataSource_getMulticallProvider, _RpcDataSource_clearProviderCache, _RpcDataSource_fetchDecimalsViaRpc, _RpcDataSource_getSupplementalCustomAssetChains, _RpcDataSource_appendRequestCustomErc20sV5, _RpcDataSource_appendRequestCustomErc20sV6, _RpcDataSource_getCustomAssetsByAccount, _RpcDataSource_getExistingAssetsMetadata;
|
|
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");
|
|
@@ -75,6 +75,7 @@ class RpcDataSource extends AbstractDataSource_js_1.AbstractDataSource {
|
|
|
75
75
|
_RpcDataSource_tokenDetectionEnabled.set(this, void 0);
|
|
76
76
|
_RpcDataSource_useExternalService.set(this, void 0);
|
|
77
77
|
_RpcDataSource_isOnboarded.set(this, void 0);
|
|
78
|
+
_RpcDataSource_isBalanceV6Enabled.set(this, void 0);
|
|
78
79
|
/** Currently active chains */
|
|
79
80
|
_RpcDataSource_activeChains.set(this, []);
|
|
80
81
|
/** Network status for each active chain */
|
|
@@ -97,6 +98,7 @@ class RpcDataSource extends AbstractDataSource_js_1.AbstractDataSource {
|
|
|
97
98
|
__classPrivateFieldSet(this, _RpcDataSource_tokenDetectionEnabled, options.tokenDetectionEnabled ?? (() => true), "f");
|
|
98
99
|
__classPrivateFieldSet(this, _RpcDataSource_useExternalService, options.useExternalService ?? (() => true), "f");
|
|
99
100
|
__classPrivateFieldSet(this, _RpcDataSource_isOnboarded, options.isOnboarded ?? (() => true), "f");
|
|
101
|
+
__classPrivateFieldSet(this, _RpcDataSource_isBalanceV6Enabled, options.isBalanceV6Enabled ?? (() => false), "f");
|
|
100
102
|
const balanceInterval = options.balanceInterval ?? DEFAULT_BALANCE_INTERVAL;
|
|
101
103
|
const detectionInterval = options.detectionInterval ?? DEFAULT_DETECTION_INTERVAL;
|
|
102
104
|
log('Initializing RpcDataSource', {
|
|
@@ -253,6 +255,11 @@ class RpcDataSource extends AbstractDataSource_js_1.AbstractDataSource {
|
|
|
253
255
|
const assetsBalance = {};
|
|
254
256
|
const assetsInfo = {};
|
|
255
257
|
const failedChains = [];
|
|
258
|
+
// request.customAssets is flat. v6 resolves pin ownership from state so
|
|
259
|
+
// each account only fetches its own pins; v5 applies the flat list as on main.
|
|
260
|
+
const customAssetsByAccount = request.customAssets
|
|
261
|
+
? __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_getCustomAssetsByAccount).call(this)
|
|
262
|
+
: {};
|
|
256
263
|
// Fetch balances for each account and its supported chains (pre-computed in request)
|
|
257
264
|
for (const { account, supportedChains, } of request.accountsWithSupportedChains) {
|
|
258
265
|
const chainsForAccount = chainsToFetch.filter((chain) => supportedChains.includes(chain));
|
|
@@ -271,25 +278,11 @@ class RpcDataSource extends AbstractDataSource_js_1.AbstractDataSource {
|
|
|
271
278
|
}
|
|
272
279
|
if (request.customAssets) {
|
|
273
280
|
const existingMetadata = __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_getExistingAssetsMetadata).call(this);
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
__classPrivateFieldGet(this, _RpcDataSource_getAssetType, "f").call(this, assetId) === 'erc20') {
|
|
280
|
-
const tokenAddress = parsed.assetReference.toLowerCase();
|
|
281
|
-
const normalizedId = (0, index_js_1.normalizeAssetId)(assetId);
|
|
282
|
-
const decimals = existingMetadata[normalizedId]?.decimals;
|
|
283
|
-
assetsToFetch.push({
|
|
284
|
-
assetId,
|
|
285
|
-
address: tokenAddress,
|
|
286
|
-
decimals,
|
|
287
|
-
});
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
catch {
|
|
291
|
-
// Skip unparseable asset IDs
|
|
292
|
-
}
|
|
281
|
+
if (__classPrivateFieldGet(this, _RpcDataSource_isBalanceV6Enabled, "f").call(this)) {
|
|
282
|
+
__classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_appendRequestCustomErc20sV6).call(this, assetsToFetch, request.customAssets, chainId, existingMetadata, new Set((customAssetsByAccount[accountId] ?? []).map(index_js_1.normalizeAssetId)));
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
__classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_appendRequestCustomErc20sV5).call(this, assetsToFetch, request.customAssets, chainId, existingMetadata);
|
|
293
286
|
}
|
|
294
287
|
}
|
|
295
288
|
try {
|
|
@@ -513,6 +506,30 @@ class RpcDataSource extends AbstractDataSource_js_1.AbstractDataSource {
|
|
|
513
506
|
return next(context);
|
|
514
507
|
};
|
|
515
508
|
}
|
|
509
|
+
/**
|
|
510
|
+
* RPC is the terminal claimer on the asset axis: it claims every EVM pin it
|
|
511
|
+
* has a provider for, even on chains claimed by higher-priority sources.
|
|
512
|
+
* Pins outside the regular RPC assignment get an asset-scoped poll (see
|
|
513
|
+
* `subscribe`).
|
|
514
|
+
*
|
|
515
|
+
* @param customAssets - Candidate CAIP-19 asset IDs still unclaimed.
|
|
516
|
+
* @param assignedChains - Chains assigned to RPC; availability fallback
|
|
517
|
+
* before network state is applied.
|
|
518
|
+
* @returns The claimed subset of `customAssets`.
|
|
519
|
+
*/
|
|
520
|
+
claimCustomAssets(customAssets, assignedChains) {
|
|
521
|
+
const available = new Set(__classPrivateFieldGet(this, _RpcDataSource_activeChains, "f").length > 0 ? __classPrivateFieldGet(this, _RpcDataSource_activeChains, "f") : assignedChains);
|
|
522
|
+
return customAssets.filter((assetId) => {
|
|
523
|
+
try {
|
|
524
|
+
const parsed = (0, utils_1.parseCaipAssetType)(assetId);
|
|
525
|
+
return (parsed.chain.namespace === utils_1.KnownCaipNamespace.Eip155 &&
|
|
526
|
+
available.has(parsed.chainId));
|
|
527
|
+
}
|
|
528
|
+
catch {
|
|
529
|
+
return false;
|
|
530
|
+
}
|
|
531
|
+
});
|
|
532
|
+
}
|
|
516
533
|
/**
|
|
517
534
|
* Subscribe to updates for the given request.
|
|
518
535
|
* Starts polling through BalanceFetcher and TokenDetector.
|
|
@@ -530,14 +547,18 @@ class RpcDataSource extends AbstractDataSource_js_1.AbstractDataSource {
|
|
|
530
547
|
const chainsToSubscribe = __classPrivateFieldGet(this, _RpcDataSource_activeChains, "f").length > 0
|
|
531
548
|
? request.chainIds.filter((chainId) => __classPrivateFieldGet(this, _RpcDataSource_activeChains, "f").includes(chainId))
|
|
532
549
|
: request.chainIds;
|
|
550
|
+
// Pins claimed on chains outside the regular RPC assignment get an
|
|
551
|
+
// asset-scoped poll below.
|
|
552
|
+
const supplementalChains = __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_getSupplementalCustomAssetChains).call(this, request, chainsToSubscribe);
|
|
533
553
|
log('Subscribe requested', {
|
|
534
554
|
subscriptionId,
|
|
535
555
|
isUpdate,
|
|
536
556
|
accounts: request.accountsWithSupportedChains.map((a) => a.account.id),
|
|
537
557
|
chainsToSubscribe,
|
|
558
|
+
supplementalChains,
|
|
538
559
|
activeChainsFallback: __classPrivateFieldGet(this, _RpcDataSource_activeChains, "f").length === 0,
|
|
539
560
|
});
|
|
540
|
-
if (chainsToSubscribe.length === 0) {
|
|
561
|
+
if (chainsToSubscribe.length === 0 && supplementalChains.length === 0) {
|
|
541
562
|
log('No active chains to subscribe');
|
|
542
563
|
return;
|
|
543
564
|
}
|
|
@@ -577,8 +598,6 @@ class RpcDataSource extends AbstractDataSource_js_1.AbstractDataSource {
|
|
|
577
598
|
};
|
|
578
599
|
const balanceToken = __classPrivateFieldGet(this, _RpcDataSource_balanceFetcher, "f").startPolling(balanceInput);
|
|
579
600
|
balancePollingTokens.push(balanceToken);
|
|
580
|
-
// Token detection is only relevant for "regular" subscriptions —
|
|
581
|
-
// a customAssetsOnly subscription should never run detection.
|
|
582
601
|
if (request.customAssetsOnly !== true &&
|
|
583
602
|
__classPrivateFieldGet(this, _RpcDataSource_tokenDetectionEnabled, "f").call(this) &&
|
|
584
603
|
__classPrivateFieldGet(this, _RpcDataSource_useExternalService, "f").call(this)) {
|
|
@@ -592,6 +611,51 @@ class RpcDataSource extends AbstractDataSource_js_1.AbstractDataSource {
|
|
|
592
611
|
}
|
|
593
612
|
}
|
|
594
613
|
}
|
|
614
|
+
// Asset-scoped polls on chains another source claimed: poll ONLY the
|
|
615
|
+
// claimed pins to avoid double-polling tracked balances. Pin changes
|
|
616
|
+
// re-run the subscription pass, which rebuilds these polls.
|
|
617
|
+
// Asset-scoped polls on chains another source claimed (v6 only).
|
|
618
|
+
if (__classPrivateFieldGet(this, _RpcDataSource_isBalanceV6Enabled, "f").call(this) && supplementalChains.length > 0) {
|
|
619
|
+
const supplemental = new Set(supplementalChains);
|
|
620
|
+
const claimedAssetsByChain = new Map();
|
|
621
|
+
for (const assetId of request.customAssets ?? []) {
|
|
622
|
+
try {
|
|
623
|
+
const { chainId } = (0, utils_1.parseCaipAssetType)(assetId);
|
|
624
|
+
if (supplemental.has(chainId)) {
|
|
625
|
+
const chainAssets = claimedAssetsByChain.get(chainId) ?? [];
|
|
626
|
+
chainAssets.push(assetId);
|
|
627
|
+
claimedAssetsByChain.set(chainId, chainAssets);
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
catch {
|
|
631
|
+
// Skip unparseable asset IDs
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
// request.customAssets is flat; ownership comes from controller state.
|
|
635
|
+
const customAssetsByAccount = __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_getCustomAssetsByAccount).call(this);
|
|
636
|
+
for (const { account } of request.accountsWithSupportedChains) {
|
|
637
|
+
const pinned = new Set(customAssetsByAccount[account.id] ?? []);
|
|
638
|
+
if (pinned.size === 0) {
|
|
639
|
+
continue;
|
|
640
|
+
}
|
|
641
|
+
for (const [chainId, chainAssets] of claimedAssetsByChain) {
|
|
642
|
+
// Sorted so the polling input (the dedupe key) is deterministic.
|
|
643
|
+
const assetIds = chainAssets
|
|
644
|
+
.filter((assetId) => pinned.has(assetId))
|
|
645
|
+
.sort();
|
|
646
|
+
if (assetIds.length === 0) {
|
|
647
|
+
continue;
|
|
648
|
+
}
|
|
649
|
+
const balanceInput = {
|
|
650
|
+
chainId: (0, exports.caipChainIdToHex)(chainId),
|
|
651
|
+
accountId: account.id,
|
|
652
|
+
accountAddress: account.address,
|
|
653
|
+
assetIds,
|
|
654
|
+
};
|
|
655
|
+
balancePollingTokens.push(__classPrivateFieldGet(this, _RpcDataSource_balanceFetcher, "f").startPolling(balanceInput));
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
}
|
|
595
659
|
// Store subscription data
|
|
596
660
|
const accounts = request.accountsWithSupportedChains.map((entry) => entry.account);
|
|
597
661
|
__classPrivateFieldGet(this, _RpcDataSource_activeSubscriptions, "f").set(subscriptionId, {
|
|
@@ -644,7 +708,7 @@ class RpcDataSource extends AbstractDataSource_js_1.AbstractDataSource {
|
|
|
644
708
|
}
|
|
645
709
|
}
|
|
646
710
|
exports.RpcDataSource = RpcDataSource;
|
|
647
|
-
_RpcDataSource_messenger = new WeakMap(), _RpcDataSource_onActiveChainsUpdated = new WeakMap(), _RpcDataSource_getNativeAssetForChain = new WeakMap(), _RpcDataSource_timeout = new WeakMap(), _RpcDataSource_tokenDetectionEnabled = new WeakMap(), _RpcDataSource_useExternalService = new WeakMap(), _RpcDataSource_isOnboarded = new WeakMap(), _RpcDataSource_activeChains = new WeakMap(), _RpcDataSource_chainStatuses = new WeakMap(), _RpcDataSource_providerCache = new WeakMap(), _RpcDataSource_activeSubscriptions = new WeakMap(), _RpcDataSource_unsubscribeTransactionConfirmed = new WeakMap(), _RpcDataSource_multicallClient = new WeakMap(), _RpcDataSource_balanceFetcher = new WeakMap(), _RpcDataSource_tokenDetector = new WeakMap(), _RpcDataSource_getAssetType = new WeakMap(), _RpcDataSource_instances = new WeakSet(), _RpcDataSource_convertToHumanReadable = function _RpcDataSource_convertToHumanReadable(rawBalance, decimals) {
|
|
711
|
+
_RpcDataSource_messenger = new WeakMap(), _RpcDataSource_onActiveChainsUpdated = new WeakMap(), _RpcDataSource_getNativeAssetForChain = new WeakMap(), _RpcDataSource_timeout = new WeakMap(), _RpcDataSource_tokenDetectionEnabled = new WeakMap(), _RpcDataSource_useExternalService = new WeakMap(), _RpcDataSource_isOnboarded = new WeakMap(), _RpcDataSource_isBalanceV6Enabled = new WeakMap(), _RpcDataSource_activeChains = new WeakMap(), _RpcDataSource_chainStatuses = new WeakMap(), _RpcDataSource_providerCache = new WeakMap(), _RpcDataSource_activeSubscriptions = new WeakMap(), _RpcDataSource_unsubscribeTransactionConfirmed = new WeakMap(), _RpcDataSource_multicallClient = new WeakMap(), _RpcDataSource_balanceFetcher = new WeakMap(), _RpcDataSource_tokenDetector = new WeakMap(), _RpcDataSource_getAssetType = new WeakMap(), _RpcDataSource_instances = new WeakSet(), _RpcDataSource_convertToHumanReadable = function _RpcDataSource_convertToHumanReadable(rawBalance, decimals) {
|
|
648
712
|
if (!Number.isFinite(decimals) || decimals < 0) {
|
|
649
713
|
log('Invalid decimals — defaulting balance to "0"', {
|
|
650
714
|
rawBalance,
|
|
@@ -1013,6 +1077,81 @@ async function _RpcDataSource_fetchDecimalsViaRpc(chainId, tokenAddress) {
|
|
|
1013
1077
|
catch {
|
|
1014
1078
|
return undefined;
|
|
1015
1079
|
}
|
|
1080
|
+
}, _RpcDataSource_getSupplementalCustomAssetChains = function _RpcDataSource_getSupplementalCustomAssetChains(request, chainsToSubscribe) {
|
|
1081
|
+
if (!request.customAssets || request.customAssets.length === 0) {
|
|
1082
|
+
return [];
|
|
1083
|
+
}
|
|
1084
|
+
const covered = new Set(chainsToSubscribe);
|
|
1085
|
+
const chains = new Set();
|
|
1086
|
+
for (const assetId of request.customAssets) {
|
|
1087
|
+
let parsed;
|
|
1088
|
+
try {
|
|
1089
|
+
parsed = (0, utils_1.parseCaipAssetType)(assetId);
|
|
1090
|
+
}
|
|
1091
|
+
catch {
|
|
1092
|
+
continue;
|
|
1093
|
+
}
|
|
1094
|
+
const { chainId } = parsed;
|
|
1095
|
+
if (parsed.chain.namespace === utils_1.KnownCaipNamespace.Eip155 &&
|
|
1096
|
+
!covered.has(chainId) &&
|
|
1097
|
+
(__classPrivateFieldGet(this, _RpcDataSource_activeChains, "f").length === 0 ||
|
|
1098
|
+
__classPrivateFieldGet(this, _RpcDataSource_activeChains, "f").includes(chainId))) {
|
|
1099
|
+
chains.add(chainId);
|
|
1100
|
+
}
|
|
1101
|
+
}
|
|
1102
|
+
return [...chains];
|
|
1103
|
+
}, _RpcDataSource_appendRequestCustomErc20sV5 = function _RpcDataSource_appendRequestCustomErc20sV5(assetsToFetch, customAssets, chainId, existingMetadata) {
|
|
1104
|
+
for (const assetId of customAssets) {
|
|
1105
|
+
try {
|
|
1106
|
+
const parsed = (0, utils_1.parseCaipAssetType)(assetId);
|
|
1107
|
+
const assetChainId = `${parsed.chain.namespace}:${parsed.chain.reference}`;
|
|
1108
|
+
if (assetChainId === chainId &&
|
|
1109
|
+
__classPrivateFieldGet(this, _RpcDataSource_getAssetType, "f").call(this, assetId) === 'erc20') {
|
|
1110
|
+
const tokenAddress = parsed.assetReference.toLowerCase();
|
|
1111
|
+
const normalizedId = (0, index_js_1.normalizeAssetId)(assetId);
|
|
1112
|
+
const decimals = existingMetadata[normalizedId]?.decimals;
|
|
1113
|
+
assetsToFetch.push({
|
|
1114
|
+
assetId,
|
|
1115
|
+
address: tokenAddress,
|
|
1116
|
+
decimals,
|
|
1117
|
+
});
|
|
1118
|
+
}
|
|
1119
|
+
}
|
|
1120
|
+
catch {
|
|
1121
|
+
// Skip unparseable asset IDs
|
|
1122
|
+
}
|
|
1123
|
+
}
|
|
1124
|
+
}, _RpcDataSource_appendRequestCustomErc20sV6 = function _RpcDataSource_appendRequestCustomErc20sV6(assetsToFetch, customAssets, chainId, existingMetadata, pinnedByAccount) {
|
|
1125
|
+
for (const assetId of customAssets) {
|
|
1126
|
+
try {
|
|
1127
|
+
const parsed = (0, utils_1.parseCaipAssetType)(assetId);
|
|
1128
|
+
const assetChainId = `${parsed.chain.namespace}:${parsed.chain.reference}`;
|
|
1129
|
+
const normalizedId = (0, index_js_1.normalizeAssetId)(assetId);
|
|
1130
|
+
if (assetChainId === chainId &&
|
|
1131
|
+
pinnedByAccount.has(normalizedId) &&
|
|
1132
|
+
__classPrivateFieldGet(this, _RpcDataSource_getAssetType, "f").call(this, assetId) === 'erc20') {
|
|
1133
|
+
const tokenAddress = parsed.assetReference.toLowerCase();
|
|
1134
|
+
const decimals = existingMetadata[normalizedId]?.decimals;
|
|
1135
|
+
assetsToFetch.push({
|
|
1136
|
+
assetId,
|
|
1137
|
+
address: tokenAddress,
|
|
1138
|
+
decimals,
|
|
1139
|
+
});
|
|
1140
|
+
}
|
|
1141
|
+
}
|
|
1142
|
+
catch {
|
|
1143
|
+
// Skip unparseable asset IDs
|
|
1144
|
+
}
|
|
1145
|
+
}
|
|
1146
|
+
}, _RpcDataSource_getCustomAssetsByAccount = function _RpcDataSource_getCustomAssetsByAccount() {
|
|
1147
|
+
try {
|
|
1148
|
+
const state = __classPrivateFieldGet(this, _RpcDataSource_messenger, "f").call('AssetsController:getState');
|
|
1149
|
+
return (state.customAssets ?? {});
|
|
1150
|
+
}
|
|
1151
|
+
catch (error) {
|
|
1152
|
+
log('Failed to get customAssets from state', { error });
|
|
1153
|
+
return {};
|
|
1154
|
+
}
|
|
1016
1155
|
}, _RpcDataSource_getExistingAssetsMetadata = function _RpcDataSource_getExistingAssetsMetadata() {
|
|
1017
1156
|
try {
|
|
1018
1157
|
const state = __classPrivateFieldGet(this, _RpcDataSource_messenger, "f").call('AssetsController:getState');
|