@metamask-previews/assets-controller 6.4.0-preview-ef7075b96 → 6.4.0-preview-beaf51362

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.
Files changed (64) hide show
  1. package/CHANGELOG.md +0 -17
  2. package/dist/AssetsController.cjs +36 -81
  3. package/dist/AssetsController.cjs.map +1 -1
  4. package/dist/AssetsController.d.cts +2 -2
  5. package/dist/AssetsController.d.cts.map +1 -1
  6. package/dist/AssetsController.d.mts +2 -2
  7. package/dist/AssetsController.d.mts.map +1 -1
  8. package/dist/AssetsController.mjs +36 -81
  9. package/dist/AssetsController.mjs.map +1 -1
  10. package/dist/data-sources/RpcDataSource.cjs +25 -47
  11. package/dist/data-sources/RpcDataSource.cjs.map +1 -1
  12. package/dist/data-sources/RpcDataSource.d.cts +0 -12
  13. package/dist/data-sources/RpcDataSource.d.cts.map +1 -1
  14. package/dist/data-sources/RpcDataSource.d.mts +0 -12
  15. package/dist/data-sources/RpcDataSource.d.mts.map +1 -1
  16. package/dist/data-sources/RpcDataSource.mjs +25 -47
  17. package/dist/data-sources/RpcDataSource.mjs.map +1 -1
  18. package/dist/data-sources/TokenDataSource.cjs +5 -12
  19. package/dist/data-sources/TokenDataSource.cjs.map +1 -1
  20. package/dist/data-sources/TokenDataSource.d.cts.map +1 -1
  21. package/dist/data-sources/TokenDataSource.d.mts.map +1 -1
  22. package/dist/data-sources/TokenDataSource.mjs +5 -12
  23. package/dist/data-sources/TokenDataSource.mjs.map +1 -1
  24. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.cjs +32 -124
  25. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.cjs.map +1 -1
  26. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.d.cts +3 -31
  27. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.d.cts.map +1 -1
  28. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.d.mts +3 -31
  29. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.d.mts.map +1 -1
  30. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.mjs +32 -124
  31. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.mjs.map +1 -1
  32. package/dist/data-sources/evm-rpc-services/clients/index.cjs.map +1 -1
  33. package/dist/data-sources/evm-rpc-services/clients/index.d.cts +1 -1
  34. package/dist/data-sources/evm-rpc-services/clients/index.d.cts.map +1 -1
  35. package/dist/data-sources/evm-rpc-services/clients/index.d.mts +1 -1
  36. package/dist/data-sources/evm-rpc-services/clients/index.d.mts.map +1 -1
  37. package/dist/data-sources/evm-rpc-services/clients/index.mjs.map +1 -1
  38. package/dist/data-sources/evm-rpc-services/index.cjs.map +1 -1
  39. package/dist/data-sources/evm-rpc-services/index.d.cts +1 -1
  40. package/dist/data-sources/evm-rpc-services/index.d.cts.map +1 -1
  41. package/dist/data-sources/evm-rpc-services/index.d.mts +1 -1
  42. package/dist/data-sources/evm-rpc-services/index.d.mts.map +1 -1
  43. package/dist/data-sources/evm-rpc-services/index.mjs.map +1 -1
  44. package/dist/data-sources/evm-rpc-services/services/TokenDetector.cjs.map +1 -1
  45. package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.cts.map +1 -1
  46. package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.mts.map +1 -1
  47. package/dist/data-sources/evm-rpc-services/services/TokenDetector.mjs.map +1 -1
  48. package/dist/middlewares/CustomAssetGraduationMiddleware.cjs +4 -32
  49. package/dist/middlewares/CustomAssetGraduationMiddleware.cjs.map +1 -1
  50. package/dist/middlewares/CustomAssetGraduationMiddleware.d.cts +4 -11
  51. package/dist/middlewares/CustomAssetGraduationMiddleware.d.cts.map +1 -1
  52. package/dist/middlewares/CustomAssetGraduationMiddleware.d.mts +4 -11
  53. package/dist/middlewares/CustomAssetGraduationMiddleware.d.mts.map +1 -1
  54. package/dist/middlewares/CustomAssetGraduationMiddleware.mjs +4 -32
  55. package/dist/middlewares/CustomAssetGraduationMiddleware.mjs.map +1 -1
  56. package/package.json +1 -1
  57. package/dist/utils/customAssetsRpcSupplement.cjs +0 -72
  58. package/dist/utils/customAssetsRpcSupplement.cjs.map +0 -1
  59. package/dist/utils/customAssetsRpcSupplement.d.cts +0 -60
  60. package/dist/utils/customAssetsRpcSupplement.d.cts.map +0 -1
  61. package/dist/utils/customAssetsRpcSupplement.d.mts +0 -60
  62. package/dist/utils/customAssetsRpcSupplement.d.mts.map +0 -1
  63. package/dist/utils/customAssetsRpcSupplement.mjs +0 -68
  64. package/dist/utils/customAssetsRpcSupplement.mjs.map +0 -1
package/CHANGELOG.md CHANGED
@@ -7,15 +7,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
- ### Added
11
-
12
- - RPC token detection now uses the same endpoint as `TokenListController` (`token.api.cx.metamask.io/tokens/{chainId}`) instead of the v3 `tokens.api.cx.metamask.io/v3/chains/.../assets` host, with no client-side `first` cap and a shared TanStack Query cache ([#8727](https://github.com/MetaMask/core/pull/8727))
13
- - Mirrors `TokenListController.getTokensURL` exactly: same query parameters (`occurrenceFloor`, `includeNativeAssets=false`, `includeTokenFees=false`, `includeAssetType=false`, `includeERC20Permit=false`, `includeStorage=false`, `includeRwaData=true`), per-chain occurrence floor (`1` on Linea / MegaETH / Tempo mainnets, `3` elsewhere), and the Linea-mainnet aggregator filter (`lineaTeam`-flagged or ≥ 3 aggregators).
14
- - Detection now also picks up `iconUrl` and `aggregators` returned by the API; previously only `address`/`symbol`/`name`/`decimals`/`occurrences` were forwarded into `TokenListEntry`.
15
- - The previous client-side `first=25` cap is removed; the API still bounds responses server-side via `occurrenceFloor`, but the long tail past the previous 25-token slice is now visible to detection.
16
- - `TokensApiClient` accepts an optional `queryClient` (compatible with `ApiPlatformClient.queryClient`); when provided it caches/dedupes per-chain list responses with a 5 min `staleTime` and 1 h `gcTime` under the `['assets-controller','rpc-detection','token-list',{chainId}]` key, so concurrent detector polls across accounts/instances coalesce into a single network request.
17
- - `RpcDataSource` accepts a new optional `queryClient` option which it forwards to `TokensApiClient`. `AssetsController` defaults this to its existing `queryApiClient.queryClient`, so consumers get the full list and shared cache automatically.
18
-
19
10
  ### Changed
20
11
 
21
12
  - Bump `@metamask/account-tree-controller` from `^7.2.0` to `^7.3.0` ([#8722](https://github.com/MetaMask/core/pull/8722))
@@ -23,14 +14,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
23
14
  - Bump `@metamask/permission-controller` from `^13.0.0` to `^13.1.0` ([#8722](https://github.com/MetaMask/core/pull/8722))
24
15
  - Bump `@metamask/transaction-controller` from `^65.1.0` to `^65.2.0` ([#8722](https://github.com/MetaMask/core/pull/8722))
25
16
 
26
- ### Fixed
27
-
28
- - `TokenDataSource` no longer drops user-imported EVM custom asset metadata when the V3 Tokens API returns the asset ID lower-cased ([#8727](https://github.com/MetaMask/core/pull/8727))
29
- - State stores `customAssets` checksummed (via `normalizeAssetId`), but the API can echo it lower-cased; the spam-filter bypass now compares lower-cased on both sides so customs reliably skip the `MIN_TOKEN_OCCURRENCES` filter and `assetsInfo` is populated for them.
30
- - `RpcDataSource` no longer overwrites richer native token metadata with a minimal stub on every balance refresh ([#8727](https://github.com/MetaMask/core/pull/8727))
31
- - Previously, each balance fetch emitted `{ type: 'native', symbol: chainStatus.nativeCurrency, name: chainStatus.nativeCurrency, decimals: 18 }` for native assets, which clobbered fields like `image`, `description`, `occurrences`, and `aggregators` enriched by the price/info API and renamed e.g. `"Avalanche"` to `"AVAX"`.
32
- - Native token metadata now mirrors the existing ERC-20 behavior: prefer existing metadata in state when present, and only emit the stub when no metadata is in state yet (e.g. first sighting of the asset). The fallback in the balance-fetch error path is gated the same way.
33
-
34
17
  ## [6.4.0]
35
18
 
36
19
  ### Added
@@ -13,7 +13,7 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
13
13
  var __importDefault = (this && this.__importDefault) || function (mod) {
14
14
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
15
  };
16
- var _AssetsController_instances, _AssetsController_isEnabled, _AssetsController_isBasicFunctionality, _AssetsController_defaultUpdateInterval, _AssetsController_trace, _AssetsController_captureException, _AssetsController_firstInitFetchReported, _AssetsController_stateSizeReported, _AssetsController_emitTrace, _AssetsController_emitStateSizeTrace, _AssetsController_uiOpen, _AssetsController_keyringUnlocked, _AssetsController_controllerMutex, _AssetsController_activeSubscriptions, _AssetsController_enabledChains, _AssetsController_lastKnownAccountIds, _AssetsController_getSelectedAccounts, _AssetsController_backendWebsocketDataSource, _AssetsController_accountsApiDataSource, _AssetsController_snapDataSource, _AssetsController_rpcDataSource, _AssetsController_stakedBalanceDataSource, _AssetsController_allBalanceDataSources_get, _AssetsController_priceDataSource, _AssetsController_detectionMiddleware, _AssetsController_customAssetGraduationMiddleware, _AssetsController_rpcFallbackMiddleware, _AssetsController_tokenDataSource, _AssetsController_unsubscribeBasicFunctionality, _AssetsController_queryApiClient, _AssetsController_onActiveChainsUpdated, _AssetsController_initializeNativeAssetsMap, _AssetsController_initializeState, _AssetsController_extractEnabledChains, _AssetsController_normalizeChainReference, _AssetsController_subscribeToEvents, _AssetsController_onUnapprovedTransactionAdded, _AssetsController_updateActive, _AssetsController_handleAccountTreeStateChange, _AssetsController_registerActionHandlers, _AssetsController_handleActiveChainsUpdate, _AssetsController_executeMiddlewares, _AssetsController_getNativeAssetMap, _AssetsController_isNativeAsset, _AssetsController_resolveNativeAssetIds, _AssetsController_getNativeAssetIdsForEnabledChains, _AssetsController_getNativeAssetIdsForAccount, _AssetsController_ensureNativeBalancesDefaultZero, _AssetsController_ensureDefaultTrackedAssetsSeeded, _AssetsController_updateState, _AssetsController_getAssetsFromState, _AssetsController_shouldHideNativeToken, _AssetsController_tokenStandardToAssetType, _AssetsController_start, _AssetsController_stop, _AssetsController_subscribeAssets, _AssetsController_subscribeAssetsBalance, _AssetsController_subscribeRpcCustomAssetsSupplement, _AssetsController_unsubscribeBySubscriptionKey, _AssetsController_subscribeStakedBalance, _AssetsController_buildChainToAccountsMap, _AssetsController_subscribeDataSource, _AssetsController_unsubscribeDataSource, _AssetsController_buildDataRequest, _AssetsController_getEnabledChainsForAccount, _AssetsController_handleAccountGroupChanged, _AssetsController_handleEnabledNetworksChanged, _AssetsController_handleNetworkAdded, _AssetsController_handleNetworkRemoved;
16
+ var _AssetsController_instances, _AssetsController_isEnabled, _AssetsController_isBasicFunctionality, _AssetsController_defaultUpdateInterval, _AssetsController_trace, _AssetsController_captureException, _AssetsController_firstInitFetchReported, _AssetsController_stateSizeReported, _AssetsController_emitTrace, _AssetsController_emitStateSizeTrace, _AssetsController_uiOpen, _AssetsController_keyringUnlocked, _AssetsController_controllerMutex, _AssetsController_activeSubscriptions, _AssetsController_enabledChains, _AssetsController_lastKnownAccountIds, _AssetsController_getSelectedAccounts, _AssetsController_backendWebsocketDataSource, _AssetsController_accountsApiDataSource, _AssetsController_snapDataSource, _AssetsController_rpcDataSource, _AssetsController_stakedBalanceDataSource, _AssetsController_allBalanceDataSources_get, _AssetsController_priceDataSource, _AssetsController_detectionMiddleware, _AssetsController_customAssetGraduationMiddleware, _AssetsController_rpcFallbackMiddleware, _AssetsController_tokenDataSource, _AssetsController_unsubscribeBasicFunctionality, _AssetsController_queryApiClient, _AssetsController_onActiveChainsUpdated, _AssetsController_initializeNativeAssetsMap, _AssetsController_initializeState, _AssetsController_extractEnabledChains, _AssetsController_normalizeChainReference, _AssetsController_subscribeToEvents, _AssetsController_onUnapprovedTransactionAdded, _AssetsController_updateActive, _AssetsController_handleAccountTreeStateChange, _AssetsController_registerActionHandlers, _AssetsController_handleActiveChainsUpdate, _AssetsController_executeMiddlewares, _AssetsController_getNativeAssetMap, _AssetsController_isNativeAsset, _AssetsController_resolveNativeAssetIds, _AssetsController_getNativeAssetIdsForEnabledChains, _AssetsController_getNativeAssetIdsForAccount, _AssetsController_ensureNativeBalancesDefaultZero, _AssetsController_ensureDefaultTrackedAssetsSeeded, _AssetsController_updateState, _AssetsController_getAssetsFromState, _AssetsController_shouldHideNativeToken, _AssetsController_tokenStandardToAssetType, _AssetsController_start, _AssetsController_stop, _AssetsController_subscribeAssets, _AssetsController_subscribeAssetsBalance, _AssetsController_subscribeRpcCustomAssetsSupplement, _AssetsController_unsubscribeBySubscriptionKey, _AssetsController_subscribeStakedBalance, _AssetsController_buildChainToAccountsMap, _AssetsController_subscribeDataSource, _AssetsController_unsubscribeDataSource, _AssetsController_buildDataRequest, _AssetsController_getEnabledChainsForAccount, _AssetsController_handleAccountGroupChanged, _AssetsController_handleEnabledNetworksChanged, _AssetsController_handleNetworkAdded;
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.AssetsController = exports.getDefaultAssetsControllerState = void 0;
19
19
  const base_controller_1 = require("@metamask/base-controller");
@@ -39,7 +39,6 @@ const ParallelMiddleware_1 = require("./middlewares/ParallelMiddleware.cjs");
39
39
  const RpcFallbackMiddleware_1 = require("./middlewares/RpcFallbackMiddleware.cjs");
40
40
  const utils_2 = require("./utils/index.cjs");
41
41
  const constants_1 = require("./utils/constants.cjs");
42
- const customAssetsRpcSupplement_1 = require("./utils/customAssetsRpcSupplement.cjs");
43
42
  const NATIVE_ASSETS_QUERY_KEY = ['nativeAssets'];
44
43
  // ============================================================================
45
44
  // CONTROLLER CONSTANTS
@@ -322,11 +321,6 @@ class AssetsController extends base_controller_1.BaseController {
322
321
  onActiveChainsUpdated: __classPrivateFieldGet(this, _AssetsController_onActiveChainsUpdated, "f"),
323
322
  getNativeAssetForChain: (chainId) => __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getNativeAssetMap).call(this)[chainId] ??
324
323
  `${chainId}/erc20:${constants_1.ZERO_ADDRESS}`,
325
- // Share the API platform's TanStack Query client so the RPC token
326
- // detector caches/dedupes its top-token-list fetches alongside the rest
327
- // of the package's API calls. Caller-provided rpcConfig.queryClient
328
- // wins via the spread below.
329
- queryClient: queryApiClient.queryClient,
330
324
  ...rpcConfig,
331
325
  isOnboarded: rpcConfig.isOnboarded ?? isOnboarded,
332
326
  }), "f");
@@ -1051,15 +1045,6 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
1051
1045
  this.messenger.subscribe('NetworkController:networkAdded', (networkConfiguration) => {
1052
1046
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_handleNetworkAdded).call(this, networkConfiguration.chainId);
1053
1047
  });
1054
- // When a network is permanently removed from NetworkController, purge
1055
- // every per-chain state slice keyed by its CAIP-19 asset IDs. This is
1056
- // distinct from NetworkEnablementController disabling the chain, which
1057
- // intentionally preserves history; removal is the user saying "this
1058
- // network is gone for good", so leftover state would just bloat the
1059
- // persisted store with entries the UI can never reach again.
1060
- this.messenger.subscribe('NetworkController:networkRemoved', (networkConfiguration) => {
1061
- __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_handleNetworkRemoved).call(this, networkConfiguration.chainId);
1062
- });
1063
1048
  // Client + Keyring lifecycle: only run when UI is open AND keyring is unlocked
1064
1049
  this.messenger.subscribe('ClientController:stateChange', (isUiOpen) => {
1065
1050
  __classPrivateFieldSet(this, _AssetsController_uiOpen, isUiOpen, "f");
@@ -1716,24 +1701,49 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
1716
1701
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeRpcCustomAssetsSupplement).call(this, accounts, chainToAccounts, rpcAssignedChains);
1717
1702
  }, _AssetsController_subscribeRpcCustomAssetsSupplement = function _AssetsController_subscribeRpcCustomAssetsSupplement(accounts, chainToAccounts, rpcAssignedChains) {
1718
1703
  const rpc = __classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f");
1704
+ const rpcAvailableChains = new Set(rpc.getActiveChainsSync());
1705
+ // Collect chains that have customAssets for at least one of the given
1706
+ // accounts and are NOT already covered by the regular RPC subscription.
1707
+ const supplementalChainSet = new Set();
1708
+ const accountsWithCustomAssets = new Set();
1709
+ for (const account of accounts) {
1710
+ const customForAccount = this.state.customAssets[account.id] ?? [];
1711
+ if (customForAccount.length === 0) {
1712
+ continue;
1713
+ }
1714
+ accountsWithCustomAssets.add(account.id);
1715
+ for (const assetId of customForAccount) {
1716
+ let chainId;
1717
+ try {
1718
+ chainId = extractChainId(assetId);
1719
+ }
1720
+ catch {
1721
+ continue;
1722
+ }
1723
+ if (rpcAssignedChains.has(chainId)) {
1724
+ continue;
1725
+ }
1726
+ if (!rpcAvailableChains.has(chainId)) {
1727
+ continue;
1728
+ }
1729
+ if (!chainToAccounts.has(chainId)) {
1730
+ continue;
1731
+ }
1732
+ supplementalChainSet.add(chainId);
1733
+ }
1734
+ }
1719
1735
  const supplementalKey = `ds:${rpc.getName()}:custom`;
1720
- const decision = (0, customAssetsRpcSupplement_1.pickRpcCustomAssetsSupplement)({
1721
- accountIds: accounts.map((account) => account.id),
1722
- customAssetsByAccount: this.state.customAssets,
1723
- rpcAssignedChains,
1724
- rpcAvailableChains: new Set(rpc.getActiveChainsSync()),
1725
- enabledChains: new Set(chainToAccounts.keys()),
1726
- });
1727
- if (decision.chains.length === 0) {
1736
+ if (supplementalChainSet.size === 0) {
1728
1737
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_unsubscribeBySubscriptionKey).call(this, rpc, supplementalKey);
1729
1738
  return;
1730
1739
  }
1731
- const supplementalAccounts = accounts.filter((account) => decision.accountIds.has(account.id));
1740
+ const supplementalChains = [...supplementalChainSet];
1741
+ const supplementalAccounts = accounts.filter((account) => accountsWithCustomAssets.has(account.id));
1732
1742
  if (supplementalAccounts.length === 0) {
1733
1743
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_unsubscribeBySubscriptionKey).call(this, rpc, supplementalKey);
1734
1744
  return;
1735
1745
  }
1736
- __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeDataSource).call(this, rpc, supplementalAccounts, decision.chains, {
1746
+ __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeDataSource).call(this, rpc, supplementalAccounts, supplementalChains, {
1737
1747
  subscriptionKey: supplementalKey,
1738
1748
  customAssetsOnly: true,
1739
1749
  });
@@ -1958,60 +1968,5 @@ async function _AssetsController_handleAccountGroupChanged() {
1958
1968
  caipChainId,
1959
1969
  });
1960
1970
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_ensureDefaultTrackedAssetsSeeded).call(this, [caipChainId]);
1961
- }, _AssetsController_handleNetworkRemoved = function _AssetsController_handleNetworkRemoved(hexChainId) {
1962
- let removedChainId;
1963
- try {
1964
- removedChainId = `eip155:${parseInt(hexChainId, 16)}`;
1965
- }
1966
- catch {
1967
- return;
1968
- }
1969
- log('Network removed — purging chain state', {
1970
- hexChainId,
1971
- chainId: removedChainId,
1972
- });
1973
- const matches = (assetId) => {
1974
- try {
1975
- return extractChainId(assetId) === removedChainId;
1976
- }
1977
- catch {
1978
- return false;
1979
- }
1980
- };
1981
- this.update((state) => {
1982
- for (const accountId of Object.keys(state.assetsBalance)) {
1983
- const accountBalances = state.assetsBalance[accountId];
1984
- for (const assetId of Object.keys(accountBalances)) {
1985
- if (matches(assetId)) {
1986
- delete accountBalances[assetId];
1987
- }
1988
- }
1989
- if (Object.keys(accountBalances).length === 0) {
1990
- delete state.assetsBalance[accountId];
1991
- }
1992
- }
1993
- const customAssets = state.customAssets;
1994
- for (const accountId of Object.keys(customAssets)) {
1995
- customAssets[accountId] = customAssets[accountId].filter((assetId) => !matches(assetId));
1996
- if (customAssets[accountId].length === 0) {
1997
- delete customAssets[accountId];
1998
- }
1999
- }
2000
- for (const assetId of Object.keys(state.assetsInfo)) {
2001
- if (matches(assetId)) {
2002
- delete state.assetsInfo[assetId];
2003
- }
2004
- }
2005
- for (const assetId of Object.keys(state.assetsPrice)) {
2006
- if (matches(assetId)) {
2007
- delete state.assetsPrice[assetId];
2008
- }
2009
- }
2010
- for (const assetId of Object.keys(state.assetPreferences)) {
2011
- if (matches(assetId)) {
2012
- delete state.assetPreferences[assetId];
2013
- }
2014
- }
2015
- });
2016
1971
  };
2017
1972
  //# sourceMappingURL=AssetsController.cjs.map