@metamask-previews/assets-controller 14.0.2-preview-4f4c98e → 14.0.2-preview-eb263b0ee
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 +0 -5
- package/dist/AssetsController-method-action-types.cjs +7 -0
- package/dist/AssetsController-method-action-types.cjs.map +1 -0
- package/dist/{AssetsController-method-action-types.d.ts → AssetsController-method-action-types.d.cts} +2 -2
- package/dist/AssetsController-method-action-types.d.cts.map +1 -0
- package/dist/AssetsController-method-action-types.d.mts +181 -0
- package/dist/AssetsController-method-action-types.d.mts.map +1 -0
- package/dist/{AssetsController-method-action-types.js → AssetsController-method-action-types.mjs} +1 -1
- package/dist/AssetsController-method-action-types.mjs.map +1 -0
- package/dist/AssetsController.cjs +2559 -0
- package/dist/AssetsController.cjs.map +1 -0
- package/dist/{AssetsController.d.ts → AssetsController.d.cts} +30 -30
- package/dist/AssetsController.d.cts.map +1 -0
- package/dist/AssetsController.d.mts +395 -0
- package/dist/AssetsController.d.mts.map +1 -0
- package/dist/{AssetsController.js → AssetsController.mjs} +29 -28
- package/dist/AssetsController.mjs.map +1 -0
- package/dist/data-sources/AbstractDataSource.cjs +111 -0
- package/dist/data-sources/AbstractDataSource.cjs.map +1 -0
- package/dist/data-sources/{AbstractDataSource.d.ts → AbstractDataSource.d.cts} +2 -2
- package/dist/data-sources/AbstractDataSource.d.cts.map +1 -0
- package/dist/data-sources/AbstractDataSource.d.mts +113 -0
- package/dist/data-sources/AbstractDataSource.d.mts.map +1 -0
- package/dist/data-sources/{AbstractDataSource.js → AbstractDataSource.mjs} +1 -1
- package/dist/data-sources/AbstractDataSource.mjs.map +1 -0
- package/dist/data-sources/AccountActivityDataSource.cjs +267 -0
- package/dist/data-sources/AccountActivityDataSource.cjs.map +1 -0
- package/dist/data-sources/{AccountActivityDataSource.d.ts → AccountActivityDataSource.d.cts} +6 -6
- package/dist/data-sources/AccountActivityDataSource.d.cts.map +1 -0
- package/dist/data-sources/AccountActivityDataSource.d.mts +80 -0
- package/dist/data-sources/AccountActivityDataSource.d.mts.map +1 -0
- package/dist/data-sources/{AccountActivityDataSource.js → AccountActivityDataSource.mjs} +11 -11
- package/dist/data-sources/AccountActivityDataSource.mjs.map +1 -0
- package/dist/data-sources/AccountsApiDataSource.cjs +586 -0
- package/dist/data-sources/AccountsApiDataSource.cjs.map +1 -0
- package/dist/data-sources/{AccountsApiDataSource.d.ts → AccountsApiDataSource.d.cts} +7 -7
- package/dist/data-sources/AccountsApiDataSource.d.cts.map +1 -0
- package/dist/data-sources/AccountsApiDataSource.d.mts +82 -0
- package/dist/data-sources/AccountsApiDataSource.d.mts.map +1 -0
- package/dist/data-sources/{AccountsApiDataSource.js → AccountsApiDataSource.mjs} +8 -7
- package/dist/data-sources/AccountsApiDataSource.mjs.map +1 -0
- package/dist/data-sources/PriceDataSource.cjs +466 -0
- package/dist/data-sources/PriceDataSource.cjs.map +1 -0
- package/dist/data-sources/{PriceDataSource.d.ts → PriceDataSource.d.cts} +5 -5
- package/dist/data-sources/PriceDataSource.d.cts.map +1 -0
- package/dist/data-sources/PriceDataSource.d.mts +100 -0
- package/dist/data-sources/PriceDataSource.d.mts.map +1 -0
- package/dist/data-sources/{PriceDataSource.js → PriceDataSource.mjs} +8 -7
- package/dist/data-sources/PriceDataSource.mjs.map +1 -0
- package/dist/data-sources/RpcDataSource.cjs +1021 -0
- package/dist/data-sources/RpcDataSource.cjs.map +1 -0
- package/dist/data-sources/{RpcDataSource.d.ts → RpcDataSource.d.cts} +10 -10
- package/dist/data-sources/RpcDataSource.d.cts.map +1 -0
- package/dist/data-sources/RpcDataSource.d.mts +174 -0
- package/dist/data-sources/RpcDataSource.d.mts.map +1 -0
- package/dist/data-sources/{RpcDataSource.js → RpcDataSource.mjs} +11 -11
- package/dist/data-sources/RpcDataSource.mjs.map +1 -0
- package/dist/data-sources/SnapDataSource.cjs +443 -0
- package/dist/data-sources/SnapDataSource.cjs.map +1 -0
- package/dist/data-sources/{SnapDataSource.d.ts → SnapDataSource.d.cts} +8 -8
- package/dist/data-sources/SnapDataSource.d.cts.map +1 -0
- package/dist/data-sources/SnapDataSource.d.mts +127 -0
- package/dist/data-sources/SnapDataSource.d.mts.map +1 -0
- package/dist/data-sources/{SnapDataSource.js → SnapDataSource.mjs} +6 -6
- package/dist/data-sources/SnapDataSource.mjs.map +1 -0
- package/dist/data-sources/StakedBalanceDataSource.cjs +616 -0
- package/dist/data-sources/StakedBalanceDataSource.cjs.map +1 -0
- package/dist/data-sources/{StakedBalanceDataSource.d.ts → StakedBalanceDataSource.d.cts} +5 -5
- 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.js → StakedBalanceDataSource.mjs} +7 -7
- package/dist/data-sources/StakedBalanceDataSource.mjs.map +1 -0
- package/dist/data-sources/TokenDataSource.cjs +583 -0
- package/dist/data-sources/TokenDataSource.cjs.map +1 -0
- package/dist/data-sources/{TokenDataSource.d.ts → TokenDataSource.d.cts} +5 -5
- package/dist/data-sources/TokenDataSource.d.cts.map +1 -0
- package/dist/data-sources/TokenDataSource.d.mts +81 -0
- package/dist/data-sources/TokenDataSource.d.mts.map +1 -0
- package/dist/data-sources/{TokenDataSource.js → TokenDataSource.mjs} +8 -7
- package/dist/data-sources/TokenDataSource.mjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/clients/MulticallClient.cjs +705 -0
- package/dist/data-sources/evm-rpc-services/clients/MulticallClient.cjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/clients/{MulticallClient.d.ts → MulticallClient.d.cts} +3 -3
- package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.cts.map +1 -0
- package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.mts +65 -0
- package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.mts.map +1 -0
- package/dist/data-sources/evm-rpc-services/clients/{MulticallClient.js → MulticallClient.mjs} +5 -5
- package/dist/data-sources/evm-rpc-services/clients/MulticallClient.mjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.cjs +312 -0
- package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.cjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/clients/{TokensApiClient.d.ts → TokensApiClient.d.cts} +2 -2
- package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.d.cts.map +1 -0
- package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.d.mts +61 -0
- package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.d.mts.map +1 -0
- package/dist/data-sources/evm-rpc-services/clients/{TokensApiClient.js → TokensApiClient.mjs} +2 -2
- package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.mjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/clients/index.cjs +10 -0
- package/dist/data-sources/evm-rpc-services/clients/index.cjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/clients/index.d.cts +4 -0
- package/dist/data-sources/evm-rpc-services/clients/index.d.cts.map +1 -0
- package/dist/data-sources/evm-rpc-services/clients/index.d.mts +4 -0
- package/dist/data-sources/evm-rpc-services/clients/index.d.mts.map +1 -0
- package/dist/data-sources/evm-rpc-services/clients/index.mjs +3 -0
- package/dist/data-sources/evm-rpc-services/clients/index.mjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/index.cjs +17 -0
- package/dist/data-sources/evm-rpc-services/index.cjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/{index.d.ts → index.d.cts} +5 -5
- package/dist/data-sources/evm-rpc-services/index.d.cts.map +1 -0
- package/dist/data-sources/evm-rpc-services/index.d.mts +5 -0
- package/dist/data-sources/evm-rpc-services/index.d.mts.map +1 -0
- package/dist/data-sources/evm-rpc-services/index.mjs +4 -0
- package/dist/data-sources/evm-rpc-services/index.mjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.cjs +247 -0
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.cjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/services/{BalanceFetcher.d.ts → BalanceFetcher.d.cts} +11 -11
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.cts.map +1 -0
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.mts +96 -0
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.mts.map +1 -0
- package/dist/data-sources/evm-rpc-services/services/{BalanceFetcher.js → BalanceFetcher.mjs} +5 -5
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.mjs.map +1 -0
- 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.ts → StakedBalanceFetcher.d.cts} +14 -13
- 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 +81 -0
- package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.d.mts.map +1 -0
- package/dist/data-sources/evm-rpc-services/services/{StakedBalanceFetcher.js → StakedBalanceFetcher.mjs} +6 -5
- package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.mjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.cjs +230 -0
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.cjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/services/{TokenDetector.d.ts → TokenDetector.d.cts} +12 -12
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.cts.map +1 -0
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.mts +78 -0
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.mts.map +1 -0
- package/dist/data-sources/evm-rpc-services/services/{TokenDetector.js → TokenDetector.mjs} +4 -4
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.mjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/services/index.cjs +13 -0
- package/dist/data-sources/evm-rpc-services/services/index.cjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/services/{index.d.ts → index.d.cts} +4 -4
- package/dist/data-sources/evm-rpc-services/services/index.d.cts.map +1 -0
- package/dist/data-sources/evm-rpc-services/services/index.d.mts +4 -0
- package/dist/data-sources/evm-rpc-services/services/index.d.mts.map +1 -0
- package/dist/data-sources/evm-rpc-services/services/index.mjs +4 -0
- package/dist/data-sources/evm-rpc-services/services/index.mjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/assets.cjs +3 -0
- package/dist/data-sources/evm-rpc-services/types/assets.cjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/{assets.d.ts → assets.d.cts} +3 -3
- package/dist/data-sources/evm-rpc-services/types/assets.d.cts.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/assets.d.mts +53 -0
- package/dist/data-sources/evm-rpc-services/types/assets.d.mts.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/assets.mjs +2 -0
- package/dist/data-sources/evm-rpc-services/types/assets.mjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/config.cjs +3 -0
- package/dist/data-sources/evm-rpc-services/types/config.cjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/{config.d.ts → config.d.cts} +2 -2
- package/dist/data-sources/evm-rpc-services/types/config.d.cts.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/config.d.mts +18 -0
- package/dist/data-sources/evm-rpc-services/types/config.d.mts.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/config.mjs +2 -0
- package/dist/data-sources/evm-rpc-services/types/config.mjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/core.cjs +3 -0
- package/dist/data-sources/evm-rpc-services/types/core.cjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/{core.d.ts → core.d.cts} +2 -2
- package/dist/data-sources/evm-rpc-services/types/core.d.cts.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/core.d.mts +19 -0
- package/dist/data-sources/evm-rpc-services/types/core.d.mts.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/core.mjs +2 -0
- package/dist/data-sources/evm-rpc-services/types/core.mjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/index.cjs +3 -0
- package/dist/data-sources/evm-rpc-services/types/index.cjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/index.d.cts +7 -0
- package/dist/data-sources/evm-rpc-services/types/index.d.cts.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/index.d.mts +7 -0
- package/dist/data-sources/evm-rpc-services/types/index.d.mts.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/index.mjs +2 -0
- package/dist/data-sources/evm-rpc-services/types/index.mjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/multicall.cjs +3 -0
- package/dist/data-sources/evm-rpc-services/types/multicall.cjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/{multicall.d.ts → multicall.d.cts} +2 -2
- package/dist/data-sources/evm-rpc-services/types/multicall.d.cts.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/multicall.d.mts +24 -0
- package/dist/data-sources/evm-rpc-services/types/multicall.d.mts.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/multicall.mjs +2 -0
- package/dist/data-sources/evm-rpc-services/types/multicall.mjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/services.cjs +3 -0
- package/dist/data-sources/evm-rpc-services/types/services.cjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/{services.d.ts → services.d.cts} +3 -3
- package/dist/data-sources/evm-rpc-services/types/services.d.cts.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/services.d.mts +70 -0
- package/dist/data-sources/evm-rpc-services/types/services.d.mts.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/services.mjs +2 -0
- package/dist/data-sources/evm-rpc-services/types/services.mjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/state.cjs +3 -0
- package/dist/data-sources/evm-rpc-services/types/state.cjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/{state.d.ts → state.d.cts} +2 -2
- package/dist/data-sources/evm-rpc-services/types/state.d.cts.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/state.d.mts +58 -0
- package/dist/data-sources/evm-rpc-services/types/state.d.mts.map +1 -0
- package/dist/data-sources/evm-rpc-services/types/state.mjs +2 -0
- package/dist/data-sources/evm-rpc-services/types/state.mjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/utils/assets.cjs +9 -0
- package/dist/data-sources/evm-rpc-services/utils/assets.cjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/utils/{assets.d.ts → assets.d.cts} +2 -2
- package/dist/data-sources/evm-rpc-services/utils/assets.d.cts.map +1 -0
- package/dist/data-sources/evm-rpc-services/utils/assets.d.mts +3 -0
- package/dist/data-sources/evm-rpc-services/utils/assets.d.mts.map +1 -0
- package/dist/data-sources/evm-rpc-services/utils/{assets.js → assets.mjs} +2 -2
- package/dist/data-sources/evm-rpc-services/utils/assets.mjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/utils/batch.cjs +45 -0
- package/dist/data-sources/evm-rpc-services/utils/batch.cjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/utils/{batch.d.ts → batch.d.cts} +1 -1
- package/dist/data-sources/evm-rpc-services/utils/batch.d.cts.map +1 -0
- package/dist/data-sources/evm-rpc-services/utils/batch.d.mts +28 -0
- package/dist/data-sources/evm-rpc-services/utils/batch.d.mts.map +1 -0
- package/dist/data-sources/evm-rpc-services/utils/{batch.js → batch.mjs} +1 -1
- package/dist/data-sources/evm-rpc-services/utils/batch.mjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/utils/index.cjs +15 -0
- package/dist/data-sources/evm-rpc-services/utils/index.cjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/utils/index.d.cts +4 -0
- package/dist/data-sources/evm-rpc-services/utils/index.d.cts.map +1 -0
- package/dist/data-sources/evm-rpc-services/utils/index.d.mts +4 -0
- package/dist/data-sources/evm-rpc-services/utils/index.d.mts.map +1 -0
- package/dist/data-sources/evm-rpc-services/utils/index.mjs +4 -0
- package/dist/data-sources/evm-rpc-services/utils/index.mjs.map +1 -0
- 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.ts → parsing.d.cts} +3 -3
- 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.js → parsing.mjs} +3 -3
- 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.ts → staking-contracts.d.cts} +1 -1
- 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.js → staking-contracts.mjs} +3 -3
- package/dist/data-sources/evm-rpc-services/utils/staking-contracts.mjs.map +1 -0
- package/dist/data-sources/index.cjs +30 -0
- package/dist/data-sources/index.cjs.map +1 -0
- package/dist/data-sources/{index.d.ts → index.d.cts} +9 -9
- package/dist/data-sources/index.d.cts.map +1 -0
- package/dist/data-sources/index.d.mts +9 -0
- package/dist/data-sources/index.d.mts.map +1 -0
- package/dist/data-sources/index.mjs +14 -0
- package/dist/data-sources/index.mjs.map +1 -0
- package/dist/defaults.cjs +125 -0
- package/dist/defaults.cjs.map +1 -0
- package/dist/{defaults.d.ts → defaults.d.cts} +2 -2
- package/dist/defaults.d.cts.map +1 -0
- package/dist/defaults.d.mts +50 -0
- package/dist/defaults.d.mts.map +1 -0
- package/dist/{defaults.js → defaults.mjs} +1 -1
- package/dist/defaults.mjs.map +1 -0
- package/dist/errors.cjs +25 -0
- package/dist/errors.cjs.map +1 -0
- package/dist/{errors.d.ts → errors.d.cts} +1 -1
- package/dist/errors.d.cts.map +1 -0
- package/dist/errors.d.mts +25 -0
- package/dist/errors.d.mts.map +1 -0
- package/dist/{errors.js → errors.mjs} +1 -1
- package/dist/errors.mjs.map +1 -0
- package/dist/index.cjs +67 -0
- package/dist/index.cjs.map +1 -0
- package/dist/{index.d.ts → index.d.cts} +26 -26
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.mts +26 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/{index.js → index.mjs} +13 -13
- package/dist/index.mjs.map +1 -0
- package/dist/logger.cjs +7 -0
- package/dist/logger.cjs.map +1 -0
- package/dist/logger.d.cts +5 -0
- package/dist/logger.d.cts.map +1 -0
- package/dist/logger.d.mts +5 -0
- package/dist/logger.d.mts.map +1 -0
- package/dist/logger.mjs +4 -0
- package/dist/logger.mjs.map +1 -0
- package/dist/middlewares/CustomAssetGraduationMiddleware.cjs +132 -0
- package/dist/middlewares/CustomAssetGraduationMiddleware.cjs.map +1 -0
- package/dist/middlewares/{CustomAssetGraduationMiddleware.d.ts → CustomAssetGraduationMiddleware.d.cts} +2 -2
- package/dist/middlewares/CustomAssetGraduationMiddleware.d.cts.map +1 -0
- package/dist/middlewares/CustomAssetGraduationMiddleware.d.mts +32 -0
- package/dist/middlewares/CustomAssetGraduationMiddleware.d.mts.map +1 -0
- package/dist/middlewares/{CustomAssetGraduationMiddleware.js → CustomAssetGraduationMiddleware.mjs} +5 -5
- package/dist/middlewares/CustomAssetGraduationMiddleware.mjs.map +1 -0
- package/dist/middlewares/DetectionMiddleware.cjs +154 -0
- package/dist/middlewares/DetectionMiddleware.cjs.map +1 -0
- package/dist/middlewares/{DetectionMiddleware.d.ts → DetectionMiddleware.d.cts} +2 -2
- package/dist/middlewares/DetectionMiddleware.d.cts.map +1 -0
- package/dist/middlewares/DetectionMiddleware.d.mts +40 -0
- package/dist/middlewares/DetectionMiddleware.d.mts.map +1 -0
- package/dist/middlewares/{DetectionMiddleware.js → DetectionMiddleware.mjs} +4 -4
- package/dist/middlewares/DetectionMiddleware.mjs.map +1 -0
- package/dist/middlewares/ParallelMiddleware.cjs +263 -0
- package/dist/middlewares/ParallelMiddleware.cjs.map +1 -0
- package/dist/middlewares/{ParallelMiddleware.d.ts → ParallelMiddleware.d.cts} +2 -2
- package/dist/middlewares/ParallelMiddleware.d.cts.map +1 -0
- package/dist/middlewares/ParallelMiddleware.d.mts +41 -0
- package/dist/middlewares/ParallelMiddleware.d.mts.map +1 -0
- package/dist/middlewares/{ParallelMiddleware.js → ParallelMiddleware.mjs} +9 -2
- package/dist/middlewares/{ParallelMiddleware.js.map → ParallelMiddleware.mjs.map} +1 -1
- package/dist/middlewares/RpcFallbackMiddleware.cjs +90 -0
- package/dist/middlewares/RpcFallbackMiddleware.cjs.map +1 -0
- package/dist/middlewares/{RpcFallbackMiddleware.d.ts → RpcFallbackMiddleware.d.cts} +2 -2
- package/dist/middlewares/RpcFallbackMiddleware.d.cts.map +1 -0
- package/dist/middlewares/RpcFallbackMiddleware.d.mts +23 -0
- package/dist/middlewares/RpcFallbackMiddleware.d.mts.map +1 -0
- package/dist/middlewares/{RpcFallbackMiddleware.js → RpcFallbackMiddleware.mjs} +4 -4
- package/dist/middlewares/RpcFallbackMiddleware.mjs.map +1 -0
- package/dist/middlewares/index.cjs +14 -0
- package/dist/middlewares/index.cjs.map +1 -0
- package/dist/middlewares/index.d.cts +9 -0
- package/dist/middlewares/index.d.cts.map +1 -0
- package/dist/middlewares/index.d.mts +9 -0
- package/dist/middlewares/index.d.mts.map +1 -0
- package/dist/middlewares/index.mjs +5 -0
- package/dist/middlewares/index.mjs.map +1 -0
- package/dist/migrations/healAssetsInfoMetadata.cjs +385 -0
- package/dist/migrations/healAssetsInfoMetadata.cjs.map +1 -0
- package/dist/migrations/{healAssetsInfoMetadata.d.ts → healAssetsInfoMetadata.d.cts} +4 -4
- package/dist/migrations/healAssetsInfoMetadata.d.cts.map +1 -0
- package/dist/migrations/healAssetsInfoMetadata.d.mts +106 -0
- package/dist/migrations/healAssetsInfoMetadata.d.mts.map +1 -0
- package/dist/migrations/{healAssetsInfoMetadata.js → healAssetsInfoMetadata.mjs} +5 -4
- package/dist/migrations/healAssetsInfoMetadata.mjs.map +1 -0
- package/dist/selectors/balance.cjs +532 -0
- package/dist/selectors/balance.cjs.map +1 -0
- package/dist/selectors/{balance.d.ts → balance.d.cts} +6 -6
- package/dist/selectors/balance.d.cts.map +1 -0
- package/dist/selectors/balance.d.mts +103 -0
- package/dist/selectors/balance.d.mts.map +1 -0
- package/dist/selectors/{balance.js → balance.mjs} +5 -5
- package/dist/selectors/balance.mjs.map +1 -0
- package/dist/types.cjs +39 -0
- package/dist/types.cjs.map +1 -0
- package/dist/{types.d.ts → types.d.cts} +4 -4
- package/dist/types.d.cts.map +1 -0
- package/dist/types.d.mts +533 -0
- package/dist/types.d.mts.map +1 -0
- package/dist/{types.js → types.mjs} +1 -1
- package/dist/types.mjs.map +1 -0
- package/dist/utils/constants.cjs +5 -0
- package/dist/utils/constants.cjs.map +1 -0
- package/dist/utils/constants.d.cts +2 -0
- package/dist/utils/constants.d.cts.map +1 -0
- package/dist/utils/constants.d.mts +2 -0
- package/dist/utils/constants.d.mts.map +1 -0
- package/dist/utils/{constants.js → constants.mjs} +1 -1
- package/dist/utils/constants.mjs.map +1 -0
- package/dist/utils/customAssetsRpcSupplement.cjs +72 -0
- package/dist/utils/customAssetsRpcSupplement.cjs.map +1 -0
- package/dist/utils/{customAssetsRpcSupplement.d.ts → customAssetsRpcSupplement.d.cts} +2 -2
- package/dist/utils/customAssetsRpcSupplement.d.cts.map +1 -0
- package/dist/utils/customAssetsRpcSupplement.d.mts +60 -0
- package/dist/utils/customAssetsRpcSupplement.d.mts.map +1 -0
- package/dist/utils/{customAssetsRpcSupplement.js → customAssetsRpcSupplement.mjs} +2 -2
- package/dist/utils/customAssetsRpcSupplement.mjs.map +1 -0
- package/dist/utils/dedupingBatchFetcher.cjs +168 -0
- package/dist/utils/dedupingBatchFetcher.cjs.map +1 -0
- package/dist/utils/{dedupingBatchFetcher.d.ts → dedupingBatchFetcher.d.cts} +1 -1
- package/dist/utils/dedupingBatchFetcher.d.cts.map +1 -0
- package/dist/utils/dedupingBatchFetcher.d.mts +72 -0
- package/dist/utils/dedupingBatchFetcher.d.mts.map +1 -0
- package/dist/utils/{dedupingBatchFetcher.js → dedupingBatchFetcher.mjs} +1 -1
- package/dist/utils/dedupingBatchFetcher.mjs.map +1 -0
- package/dist/utils/fetchWithTimeout.cjs +30 -0
- package/dist/utils/fetchWithTimeout.cjs.map +1 -0
- package/dist/utils/{fetchWithTimeout.d.ts → fetchWithTimeout.d.cts} +1 -1
- package/dist/utils/fetchWithTimeout.d.cts.map +1 -0
- package/dist/utils/fetchWithTimeout.d.mts +11 -0
- package/dist/utils/fetchWithTimeout.d.mts.map +1 -0
- package/dist/utils/{fetchWithTimeout.js → fetchWithTimeout.mjs} +1 -1
- package/dist/utils/fetchWithTimeout.mjs.map +1 -0
- package/dist/utils/formatExchangeRatesForBridge.cjs +161 -0
- package/dist/utils/formatExchangeRatesForBridge.cjs.map +1 -0
- package/dist/utils/{formatExchangeRatesForBridge.d.ts → formatExchangeRatesForBridge.d.cts} +3 -3
- package/dist/utils/formatExchangeRatesForBridge.d.cts.map +1 -0
- package/dist/utils/formatExchangeRatesForBridge.d.mts +43 -0
- package/dist/utils/formatExchangeRatesForBridge.d.mts.map +1 -0
- package/dist/utils/{formatExchangeRatesForBridge.js → formatExchangeRatesForBridge.mjs} +7 -6
- package/dist/utils/formatExchangeRatesForBridge.mjs.map +1 -0
- package/dist/utils/formatStateForTransactionPay.cjs +174 -0
- package/dist/utils/formatStateForTransactionPay.cjs.map +1 -0
- package/dist/utils/{formatStateForTransactionPay.d.ts → formatStateForTransactionPay.d.cts} +3 -3
- package/dist/utils/formatStateForTransactionPay.d.cts.map +1 -0
- package/dist/utils/formatStateForTransactionPay.d.mts +72 -0
- package/dist/utils/formatStateForTransactionPay.d.mts.map +1 -0
- package/dist/utils/{formatStateForTransactionPay.js → formatStateForTransactionPay.mjs} +8 -7
- package/dist/utils/formatStateForTransactionPay.mjs.map +1 -0
- package/dist/utils/index.cjs +21 -0
- package/dist/utils/index.cjs.map +1 -0
- package/dist/utils/index.d.cts +9 -0
- package/dist/utils/index.d.cts.map +1 -0
- package/dist/utils/index.d.mts +9 -0
- package/dist/utils/index.d.mts.map +1 -0
- package/dist/utils/index.mjs +7 -0
- package/dist/utils/index.mjs.map +1 -0
- package/dist/utils/native-assets.cjs +64 -0
- package/dist/utils/native-assets.cjs.map +1 -0
- package/dist/utils/{native-assets.d.ts → native-assets.d.cts} +2 -2
- package/dist/utils/native-assets.d.cts.map +1 -0
- package/dist/utils/native-assets.d.mts +19 -0
- package/dist/utils/native-assets.d.mts.map +1 -0
- package/dist/utils/{native-assets.js → native-assets.mjs} +5 -5
- package/dist/utils/native-assets.mjs.map +1 -0
- package/dist/utils/normalizeAmountString.cjs +64 -0
- package/dist/utils/normalizeAmountString.cjs.map +1 -0
- package/dist/utils/{normalizeAmountString.d.ts → normalizeAmountString.d.cts} +1 -1
- package/dist/utils/normalizeAmountString.d.cts.map +1 -0
- package/dist/utils/normalizeAmountString.d.mts +35 -0
- package/dist/utils/normalizeAmountString.d.mts.map +1 -0
- package/dist/utils/{normalizeAmountString.js → normalizeAmountString.mjs} +2 -2
- package/dist/utils/normalizeAmountString.mjs.map +1 -0
- package/dist/utils/normalizeAssetId.cjs +60 -0
- package/dist/utils/normalizeAssetId.cjs.map +1 -0
- package/dist/utils/{normalizeAssetId.d.ts → normalizeAssetId.d.cts} +3 -3
- package/dist/utils/normalizeAssetId.d.cts.map +1 -0
- package/dist/utils/normalizeAssetId.d.mts +32 -0
- package/dist/utils/normalizeAssetId.d.mts.map +1 -0
- package/dist/utils/{normalizeAssetId.js → normalizeAssetId.mjs} +11 -4
- package/dist/utils/normalizeAssetId.mjs.map +1 -0
- package/dist/utils/snaps-assets-migration.cjs +171 -0
- package/dist/utils/snaps-assets-migration.cjs.map +1 -0
- package/dist/utils/{snaps-assets-migration.d.ts → snaps-assets-migration.d.cts} +5 -5
- package/dist/utils/snaps-assets-migration.d.cts.map +1 -0
- package/dist/utils/snaps-assets-migration.d.mts +113 -0
- package/dist/utils/snaps-assets-migration.d.mts.map +1 -0
- package/dist/utils/{snaps-assets-migration.js → snaps-assets-migration.mjs} +2 -2
- package/dist/utils/snaps-assets-migration.mjs.map +1 -0
- package/dist/utils/trace.cjs +120 -0
- package/dist/utils/trace.cjs.map +1 -0
- package/dist/utils/{trace.d.ts → trace.d.cts} +2 -2
- package/dist/utils/trace.d.cts.map +1 -0
- package/dist/utils/trace.d.mts +52 -0
- package/dist/utils/trace.d.mts.map +1 -0
- package/dist/utils/{trace.js → trace.mjs} +1 -1
- package/dist/utils/trace.mjs.map +1 -0
- package/package.json +18 -15
- package/dist/AssetsController-method-action-types.d.ts.map +0 -1
- package/dist/AssetsController-method-action-types.js.map +0 -1
- package/dist/AssetsController.d.ts.map +0 -1
- package/dist/AssetsController.js.map +0 -1
- package/dist/data-sources/AbstractDataSource.d.ts.map +0 -1
- package/dist/data-sources/AbstractDataSource.js.map +0 -1
- package/dist/data-sources/AccountActivityDataSource.d.ts.map +0 -1
- package/dist/data-sources/AccountActivityDataSource.js.map +0 -1
- package/dist/data-sources/AccountsApiDataSource.d.ts.map +0 -1
- package/dist/data-sources/AccountsApiDataSource.js.map +0 -1
- package/dist/data-sources/PriceDataSource.d.ts.map +0 -1
- package/dist/data-sources/PriceDataSource.js.map +0 -1
- package/dist/data-sources/RpcDataSource.d.ts.map +0 -1
- package/dist/data-sources/RpcDataSource.js.map +0 -1
- package/dist/data-sources/SnapDataSource.d.ts.map +0 -1
- package/dist/data-sources/SnapDataSource.js.map +0 -1
- package/dist/data-sources/StakedBalanceDataSource.d.ts.map +0 -1
- package/dist/data-sources/StakedBalanceDataSource.js.map +0 -1
- package/dist/data-sources/TokenDataSource.d.ts.map +0 -1
- package/dist/data-sources/TokenDataSource.js.map +0 -1
- package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.ts.map +0 -1
- package/dist/data-sources/evm-rpc-services/clients/MulticallClient.js.map +0 -1
- package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.d.ts.map +0 -1
- package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.js.map +0 -1
- package/dist/data-sources/evm-rpc-services/clients/index.d.ts +0 -4
- package/dist/data-sources/evm-rpc-services/clients/index.d.ts.map +0 -1
- package/dist/data-sources/evm-rpc-services/clients/index.js +0 -3
- package/dist/data-sources/evm-rpc-services/clients/index.js.map +0 -1
- package/dist/data-sources/evm-rpc-services/index.d.ts.map +0 -1
- package/dist/data-sources/evm-rpc-services/index.js +0 -4
- package/dist/data-sources/evm-rpc-services/index.js.map +0 -1
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.ts.map +0 -1
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.js.map +0 -1
- package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.d.ts.map +0 -1
- package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.js.map +0 -1
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.ts.map +0 -1
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.js.map +0 -1
- package/dist/data-sources/evm-rpc-services/services/index.d.ts.map +0 -1
- package/dist/data-sources/evm-rpc-services/services/index.js +0 -4
- package/dist/data-sources/evm-rpc-services/services/index.js.map +0 -1
- package/dist/data-sources/evm-rpc-services/types/assets.d.ts.map +0 -1
- package/dist/data-sources/evm-rpc-services/types/assets.js +0 -2
- package/dist/data-sources/evm-rpc-services/types/assets.js.map +0 -1
- package/dist/data-sources/evm-rpc-services/types/config.d.ts.map +0 -1
- package/dist/data-sources/evm-rpc-services/types/config.js +0 -2
- package/dist/data-sources/evm-rpc-services/types/config.js.map +0 -1
- package/dist/data-sources/evm-rpc-services/types/core.d.ts.map +0 -1
- package/dist/data-sources/evm-rpc-services/types/core.js +0 -2
- package/dist/data-sources/evm-rpc-services/types/core.js.map +0 -1
- package/dist/data-sources/evm-rpc-services/types/index.d.ts +0 -7
- package/dist/data-sources/evm-rpc-services/types/index.d.ts.map +0 -1
- package/dist/data-sources/evm-rpc-services/types/index.js +0 -2
- package/dist/data-sources/evm-rpc-services/types/index.js.map +0 -1
- package/dist/data-sources/evm-rpc-services/types/multicall.d.ts.map +0 -1
- package/dist/data-sources/evm-rpc-services/types/multicall.js +0 -2
- package/dist/data-sources/evm-rpc-services/types/multicall.js.map +0 -1
- package/dist/data-sources/evm-rpc-services/types/services.d.ts.map +0 -1
- package/dist/data-sources/evm-rpc-services/types/services.js +0 -2
- package/dist/data-sources/evm-rpc-services/types/services.js.map +0 -1
- package/dist/data-sources/evm-rpc-services/types/state.d.ts.map +0 -1
- package/dist/data-sources/evm-rpc-services/types/state.js +0 -2
- package/dist/data-sources/evm-rpc-services/types/state.js.map +0 -1
- package/dist/data-sources/evm-rpc-services/utils/assets.d.ts.map +0 -1
- package/dist/data-sources/evm-rpc-services/utils/assets.js.map +0 -1
- package/dist/data-sources/evm-rpc-services/utils/batch.d.ts.map +0 -1
- package/dist/data-sources/evm-rpc-services/utils/batch.js.map +0 -1
- package/dist/data-sources/evm-rpc-services/utils/index.d.ts +0 -4
- package/dist/data-sources/evm-rpc-services/utils/index.d.ts.map +0 -1
- package/dist/data-sources/evm-rpc-services/utils/index.js +0 -4
- package/dist/data-sources/evm-rpc-services/utils/index.js.map +0 -1
- package/dist/data-sources/evm-rpc-services/utils/parsing.d.ts.map +0 -1
- package/dist/data-sources/evm-rpc-services/utils/parsing.js.map +0 -1
- package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.ts.map +0 -1
- package/dist/data-sources/evm-rpc-services/utils/staking-contracts.js.map +0 -1
- package/dist/data-sources/index.d.ts.map +0 -1
- package/dist/data-sources/index.js +0 -14
- package/dist/data-sources/index.js.map +0 -1
- package/dist/defaults.d.ts.map +0 -1
- package/dist/defaults.js.map +0 -1
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/logger.d.ts +0 -4
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js +0 -4
- package/dist/logger.js.map +0 -1
- package/dist/middlewares/CustomAssetGraduationMiddleware.d.ts.map +0 -1
- package/dist/middlewares/CustomAssetGraduationMiddleware.js.map +0 -1
- package/dist/middlewares/DetectionMiddleware.d.ts.map +0 -1
- package/dist/middlewares/DetectionMiddleware.js.map +0 -1
- package/dist/middlewares/ParallelMiddleware.d.ts.map +0 -1
- package/dist/middlewares/RpcFallbackMiddleware.d.ts.map +0 -1
- package/dist/middlewares/RpcFallbackMiddleware.js.map +0 -1
- package/dist/middlewares/index.d.ts +0 -9
- package/dist/middlewares/index.d.ts.map +0 -1
- package/dist/middlewares/index.js +0 -5
- package/dist/middlewares/index.js.map +0 -1
- package/dist/migrations/healAssetsInfoMetadata.d.ts.map +0 -1
- package/dist/migrations/healAssetsInfoMetadata.js.map +0 -1
- package/dist/selectors/balance.d.ts.map +0 -1
- package/dist/selectors/balance.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/utils/constants.d.ts +0 -2
- package/dist/utils/constants.d.ts.map +0 -1
- package/dist/utils/constants.js.map +0 -1
- package/dist/utils/customAssetsRpcSupplement.d.ts.map +0 -1
- package/dist/utils/customAssetsRpcSupplement.js.map +0 -1
- package/dist/utils/dedupingBatchFetcher.d.ts.map +0 -1
- package/dist/utils/dedupingBatchFetcher.js.map +0 -1
- package/dist/utils/fetchWithTimeout.d.ts.map +0 -1
- package/dist/utils/fetchWithTimeout.js.map +0 -1
- package/dist/utils/formatExchangeRatesForBridge.d.ts.map +0 -1
- package/dist/utils/formatExchangeRatesForBridge.js.map +0 -1
- package/dist/utils/formatStateForTransactionPay.d.ts.map +0 -1
- package/dist/utils/formatStateForTransactionPay.js.map +0 -1
- package/dist/utils/index.d.ts +0 -9
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -7
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/native-assets.d.ts.map +0 -1
- package/dist/utils/native-assets.js.map +0 -1
- package/dist/utils/normalizeAmountString.d.ts.map +0 -1
- package/dist/utils/normalizeAmountString.js.map +0 -1
- package/dist/utils/normalizeAssetId.d.ts.map +0 -1
- package/dist/utils/normalizeAssetId.js.map +0 -1
- package/dist/utils/snaps-assets-migration.d.ts.map +0 -1
- package/dist/utils/snaps-assets-migration.js.map +0 -1
- package/dist/utils/trace.d.ts.map +0 -1
- package/dist/utils/trace.js.map +0 -1
|
@@ -0,0 +1,583 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
3
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
4
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
5
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
6
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
7
|
+
};
|
|
8
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
9
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
10
|
+
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");
|
|
11
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
|
+
};
|
|
13
|
+
var _TokenDataSource_instances, _TokenDataSource_apiClient, _TokenDataSource_getNativeAssetIds, _TokenDataSource_getAssetType, _TokenDataSource_messenger, _TokenDataSource_fetchTimeoutMs, _TokenDataSource_getSupportedNetworks, _TokenDataSource_getSuggestedOccurrenceFloors, _TokenDataSource_filterAssetsByNetwork, _TokenDataSource_filterBlockaidSpamTokens;
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.TokenDataSource = exports.CaipAssetNamespace = void 0;
|
|
16
|
+
const core_backend_1 = require("@metamask/core-backend");
|
|
17
|
+
const phishing_controller_1 = require("@metamask/phishing-controller");
|
|
18
|
+
const utils_1 = require("@metamask/utils");
|
|
19
|
+
const logger_js_1 = require("../logger.cjs");
|
|
20
|
+
const types_js_1 = require("../types.cjs");
|
|
21
|
+
const index_js_1 = require("../utils/index.cjs");
|
|
22
|
+
const index_js_2 = require("./evm-rpc-services/index.cjs");
|
|
23
|
+
// ============================================================================
|
|
24
|
+
// CONSTANTS
|
|
25
|
+
// ============================================================================
|
|
26
|
+
const CONTROLLER_NAME = 'TokenDataSource';
|
|
27
|
+
const DEFAULT_FETCH_TIMEOUT_MS = 15000;
|
|
28
|
+
const log = (0, logger_js_1.createModuleLogger)(logger_js_1.projectLogger, CONTROLLER_NAME);
|
|
29
|
+
/** Max asset IDs per tokens API request. */
|
|
30
|
+
const TOKENS_API_BATCH_SIZE = 50;
|
|
31
|
+
/** Max tokens per PhishingController:bulkScanTokens request (see PhishingController). */
|
|
32
|
+
const BULK_SCAN_BATCH_SIZE = 100;
|
|
33
|
+
/**
|
|
34
|
+
* Fallback minimum aggregator occurrences for EVM ERC-20 spam filtering when
|
|
35
|
+
* Token API `/v1/suggestedOccurrenceFloors` has no entry for the chain (or
|
|
36
|
+
* the floors request fails). Non-EVM tokens are filtered via Blockaid instead.
|
|
37
|
+
*/
|
|
38
|
+
const DEFAULT_OCCURRENCE_FLOOR = 3;
|
|
39
|
+
/** CAIP-19 `assetNamespace` segments used across filtering logic. */
|
|
40
|
+
var CaipAssetNamespace;
|
|
41
|
+
(function (CaipAssetNamespace) {
|
|
42
|
+
CaipAssetNamespace["Slip44"] = "slip44";
|
|
43
|
+
CaipAssetNamespace["Erc20"] = "erc20";
|
|
44
|
+
CaipAssetNamespace["Token"] = "token";
|
|
45
|
+
})(CaipAssetNamespace || (exports.CaipAssetNamespace = CaipAssetNamespace = {}));
|
|
46
|
+
const MUSD_ADDRESS_LOWERCASE = '0xaca92e438df0b2401ff60da7e4337b687a2435da';
|
|
47
|
+
// ============================================================================
|
|
48
|
+
// HELPER FUNCTIONS
|
|
49
|
+
// ============================================================================
|
|
50
|
+
/**
|
|
51
|
+
* Transform V3 API response to FungibleAssetMetadata for state storage.
|
|
52
|
+
*
|
|
53
|
+
* Mapping:
|
|
54
|
+
* - assetId → used to derive `type` (native/erc20/spl)
|
|
55
|
+
* - iconUrl → image
|
|
56
|
+
* - All other fields map directly
|
|
57
|
+
*
|
|
58
|
+
* @param assetId - CAIP-19 asset ID used to derive token type.
|
|
59
|
+
* @param assetData - V3 API response data.
|
|
60
|
+
* @param getAssetType - Returns the asset type for a given CAIP-19 asset ID.
|
|
61
|
+
* @returns FungibleAssetMetadata for state storage.
|
|
62
|
+
*/
|
|
63
|
+
function transformV3AssetResponseToMetadata(assetId, assetData, getAssetType) {
|
|
64
|
+
const metadata = {
|
|
65
|
+
type: getAssetType(assetId),
|
|
66
|
+
// BaseAssetMetadata fields
|
|
67
|
+
name: assetData.name,
|
|
68
|
+
symbol: assetData.symbol,
|
|
69
|
+
decimals: assetData.decimals,
|
|
70
|
+
image: assetData.iconUrl,
|
|
71
|
+
// Direct mapping fields
|
|
72
|
+
coingeckoId: assetData.coingeckoId,
|
|
73
|
+
occurrences: assetData.occurrences,
|
|
74
|
+
aggregators: assetData.aggregators,
|
|
75
|
+
labels: assetData.labels,
|
|
76
|
+
erc20Permit: assetData.erc20Permit,
|
|
77
|
+
fees: assetData.fees,
|
|
78
|
+
honeypotStatus: assetData.honeypotStatus,
|
|
79
|
+
storage: assetData.storage,
|
|
80
|
+
isContractVerified: assetData.isContractVerified,
|
|
81
|
+
description: assetData.description,
|
|
82
|
+
};
|
|
83
|
+
return metadata;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Resolve the occurrence floor for an EVM asset from suggested floors keyed by
|
|
87
|
+
* decimal chain ID (e.g. `{ "1": 3, "143": 1 }`).
|
|
88
|
+
*
|
|
89
|
+
* @param assetId - CAIP-19 asset ID.
|
|
90
|
+
* @param floors - Map of decimal chain ID → suggested floor.
|
|
91
|
+
* @returns Floor to apply, or {@link DEFAULT_OCCURRENCE_FLOOR} when missing.
|
|
92
|
+
*/
|
|
93
|
+
function getOccurrenceFloorForAsset(assetId, floors) {
|
|
94
|
+
try {
|
|
95
|
+
const { chain } = (0, utils_1.parseCaipAssetType)(assetId);
|
|
96
|
+
return floors[chain.reference] ?? DEFAULT_OCCURRENCE_FLOOR;
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return DEFAULT_OCCURRENCE_FLOOR;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// ============================================================================
|
|
103
|
+
// TOKEN DATA SOURCE
|
|
104
|
+
// ============================================================================
|
|
105
|
+
/**
|
|
106
|
+
* TokenDataSource enriches responses with token metadata from the Tokens API.
|
|
107
|
+
*
|
|
108
|
+
* This middleware-based data source:
|
|
109
|
+
* - Checks detected assets for missing metadata/images
|
|
110
|
+
* - Also checks `assetsBalance` entries missing metadata/images (heal path)
|
|
111
|
+
* - Fetches metadata from Tokens API v3 for assets needing enrichment
|
|
112
|
+
* - Filters EVM ERC-20 spam using per-chain floors from Token API
|
|
113
|
+
* `/v1/suggestedOccurrenceFloors` (default floor 3) for newly detected
|
|
114
|
+
* assets only; balance-only heals are enriched without spam-filtering
|
|
115
|
+
* - Merges fetched metadata into the response
|
|
116
|
+
*
|
|
117
|
+
* Pass the same {@link AssetsControllerMessenger} as other data sources for Blockaid
|
|
118
|
+
* token scans.
|
|
119
|
+
*/
|
|
120
|
+
class TokenDataSource {
|
|
121
|
+
getName() {
|
|
122
|
+
return this.name;
|
|
123
|
+
}
|
|
124
|
+
constructor(messenger, options) {
|
|
125
|
+
_TokenDataSource_instances.add(this);
|
|
126
|
+
this.name = CONTROLLER_NAME;
|
|
127
|
+
/** ApiPlatformClient for cached API calls */
|
|
128
|
+
_TokenDataSource_apiClient.set(this, void 0);
|
|
129
|
+
/** Returns CAIP-19 native asset IDs from NetworkEnablementController state */
|
|
130
|
+
_TokenDataSource_getNativeAssetIds.set(this, void 0);
|
|
131
|
+
/** Returns the asset type for a given CAIP-19 asset ID */
|
|
132
|
+
_TokenDataSource_getAssetType.set(this, void 0);
|
|
133
|
+
/** Shared controller messenger — used for `PhishingController:bulkScanTokens`. */
|
|
134
|
+
_TokenDataSource_messenger.set(this, void 0);
|
|
135
|
+
_TokenDataSource_fetchTimeoutMs.set(this, void 0);
|
|
136
|
+
__classPrivateFieldSet(this, _TokenDataSource_messenger, messenger, "f");
|
|
137
|
+
__classPrivateFieldSet(this, _TokenDataSource_apiClient, options.queryApiClient, "f");
|
|
138
|
+
__classPrivateFieldSet(this, _TokenDataSource_getNativeAssetIds, options.getNativeAssetIds, "f");
|
|
139
|
+
__classPrivateFieldSet(this, _TokenDataSource_getAssetType, options.getAssetType, "f");
|
|
140
|
+
__classPrivateFieldSet(this, _TokenDataSource_fetchTimeoutMs, options.fetchTimeoutMs ?? DEFAULT_FETCH_TIMEOUT_MS, "f");
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Middleware that runs BEFORE DetectionMiddleware for account-activity
|
|
144
|
+
* (websocket) updates. New-to-state EVM ERC-20 balances are enriched with
|
|
145
|
+
* their Token API occurrence counts first, and tokens below the per-chain
|
|
146
|
+
* suggested occurrence floor are dropped from the response (balances and
|
|
147
|
+
* stub metadata) so spam airdrops never reach detection, metadata
|
|
148
|
+
* enrichment, pricing, or state. Custom assets and mUSD are exempt, and
|
|
149
|
+
* assets unknown to the Token API are kept (fail open), mirroring
|
|
150
|
+
* {@link TokenDataSource.assetsMiddleware} filtering semantics.
|
|
151
|
+
*
|
|
152
|
+
* @returns The middleware function for the assets pipeline.
|
|
153
|
+
*/
|
|
154
|
+
get occurrenceFilterMiddleware() {
|
|
155
|
+
return (0, types_js_1.forDataTypes)(['balance'], async (ctx, next) => {
|
|
156
|
+
const { response } = ctx;
|
|
157
|
+
const { assetsBalance: stateBalances, assetsInfo: stateMetadata, customAssets, } = ctx.getAssetsState();
|
|
158
|
+
const customAssetIds = new Set(Object.values(customAssets ?? {})
|
|
159
|
+
.flat()
|
|
160
|
+
.map((id) => id.toLowerCase()));
|
|
161
|
+
// State keys are checksummed, but AccountActivity delivers lower-case
|
|
162
|
+
// ERC-20 IDs, so every lookup below compares lower-cased IDs. Matching
|
|
163
|
+
// case-sensitively would classify existing holdings as new and delete
|
|
164
|
+
// the very balance update this pipeline pass is meant to persist.
|
|
165
|
+
const knownMetadataIds = new Set(Object.keys(stateMetadata).map((id) => id.toLowerCase()));
|
|
166
|
+
// Candidates: EVM ERC-20s that are genuinely new (absent from state
|
|
167
|
+
// balances and metadata) — the same assets DetectionMiddleware would
|
|
168
|
+
// mark as newly detected right after this middleware.
|
|
169
|
+
const candidateByLowerId = new Map();
|
|
170
|
+
for (const [accountId, accountBalances] of Object.entries(response.assetsBalance ?? {})) {
|
|
171
|
+
const knownBalanceIds = new Set(Object.keys(stateBalances[accountId] ?? {}).map((id) => id.toLowerCase()));
|
|
172
|
+
for (const assetId of Object.keys(accountBalances)) {
|
|
173
|
+
const caipAssetId = assetId;
|
|
174
|
+
const lowerId = assetId.toLowerCase();
|
|
175
|
+
if (knownBalanceIds.has(lowerId) ||
|
|
176
|
+
knownMetadataIds.has(lowerId) ||
|
|
177
|
+
customAssetIds.has(lowerId) ||
|
|
178
|
+
lowerId.includes(`/erc20:${MUSD_ADDRESS_LOWERCASE}`)) {
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
try {
|
|
182
|
+
const { assetNamespace, chain } = (0, utils_1.parseCaipAssetType)(caipAssetId);
|
|
183
|
+
if (assetNamespace === CaipAssetNamespace.Erc20 &&
|
|
184
|
+
chain.namespace === utils_1.KnownCaipNamespace.Eip155) {
|
|
185
|
+
candidateByLowerId.set(lowerId, assetId);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
// Unparseable IDs are left for downstream middleware to handle.
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (candidateByLowerId.size === 0) {
|
|
194
|
+
return next(ctx);
|
|
195
|
+
}
|
|
196
|
+
try {
|
|
197
|
+
const [occurrenceResponse, suggestedOccurrenceFloors] = await Promise.all([
|
|
198
|
+
(0, index_js_2.reduceInBatchesSerially)({
|
|
199
|
+
values: [...candidateByLowerId.values()],
|
|
200
|
+
batchSize: TOKENS_API_BATCH_SIZE,
|
|
201
|
+
eachBatch: async (workingResult, batch) => {
|
|
202
|
+
const batchResponse = await (0, index_js_1.fetchWithTimeout)(() => __classPrivateFieldGet(this, _TokenDataSource_apiClient, "f").tokens.fetchV3Assets(batch, {
|
|
203
|
+
includeOccurrences: true,
|
|
204
|
+
}), __classPrivateFieldGet(this, _TokenDataSource_fetchTimeoutMs, "f"));
|
|
205
|
+
return [
|
|
206
|
+
...workingResult,
|
|
207
|
+
...batchResponse,
|
|
208
|
+
];
|
|
209
|
+
},
|
|
210
|
+
initialResult: [],
|
|
211
|
+
}),
|
|
212
|
+
__classPrivateFieldGet(this, _TokenDataSource_instances, "m", _TokenDataSource_getSuggestedOccurrenceFloors).call(this),
|
|
213
|
+
]);
|
|
214
|
+
// Only assets the API knows can be judged; missing ones are kept.
|
|
215
|
+
const spamAssetIds = new Set();
|
|
216
|
+
for (const assetData of occurrenceResponse) {
|
|
217
|
+
const candidateId = candidateByLowerId.get(assetData.assetId.toLowerCase());
|
|
218
|
+
if (candidateId !== undefined &&
|
|
219
|
+
(assetData.occurrences ?? 0) <
|
|
220
|
+
getOccurrenceFloorForAsset(candidateId, suggestedOccurrenceFloors)) {
|
|
221
|
+
spamAssetIds.add(candidateId);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
if (spamAssetIds.size > 0) {
|
|
225
|
+
for (const accountBalances of Object.values(response.assetsBalance ?? {})) {
|
|
226
|
+
for (const assetId of spamAssetIds) {
|
|
227
|
+
delete accountBalances[assetId];
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
if (response.assetsInfo) {
|
|
231
|
+
const spamLowerIds = new Set([...spamAssetIds].map((id) => id.toLowerCase()));
|
|
232
|
+
for (const assetId of Object.keys(response.assetsInfo)) {
|
|
233
|
+
if (spamLowerIds.has(assetId.toLowerCase())) {
|
|
234
|
+
delete response.assetsInfo[assetId];
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
log('Filtered low-occurrence websocket assets', {
|
|
239
|
+
assetIds: [...spamAssetIds],
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
// Fail open — keep all assets when occurrences cannot be fetched.
|
|
245
|
+
log('Failed to fetch occurrences for websocket update', { error });
|
|
246
|
+
}
|
|
247
|
+
return next(ctx);
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Get the middleware for enriching responses with token metadata.
|
|
252
|
+
*
|
|
253
|
+
* This middleware:
|
|
254
|
+
* 1. Extracts the response from context
|
|
255
|
+
* 2. Fetches metadata for detected assets and balances missing metadata
|
|
256
|
+
* 3. Enriches the response with fetched metadata
|
|
257
|
+
* 4. Calls next() at the end to continue the middleware chain
|
|
258
|
+
*
|
|
259
|
+
* Spam filtering (EVM occurrence floors / non-EVM Blockaid) applies only to
|
|
260
|
+
* newly `detectedAssets`. Balance-only heals — assets already present in
|
|
261
|
+
* `assetsBalance` but missing `assetsInfo`, which DetectionMiddleware skips —
|
|
262
|
+
* are enriched without being filtered out of balances.
|
|
263
|
+
*
|
|
264
|
+
* @returns The middleware function for the assets pipeline.
|
|
265
|
+
*/
|
|
266
|
+
get assetsMiddleware() {
|
|
267
|
+
return (0, types_js_1.forDataTypes)(['metadata'], async (ctx, next) => {
|
|
268
|
+
// Extract response from context
|
|
269
|
+
const { response } = ctx;
|
|
270
|
+
const { assetsInfo: stateMetadata, customAssets } = ctx.getAssetsState();
|
|
271
|
+
const assetIdsNeedingMetadata = new Set();
|
|
272
|
+
// Newly detected asset IDs (lowercase) — subject to spam filtering.
|
|
273
|
+
const detectedAssetIds = new Set();
|
|
274
|
+
// Balance-only heals (in assetsBalance, not newly detected) — enrich
|
|
275
|
+
// metadata but do not spam-filter / delete holdings.
|
|
276
|
+
const balanceHealAssetIds = new Set();
|
|
277
|
+
// Custom assets are user-imported — exempt from spam filtering.
|
|
278
|
+
// State stores asset IDs in their normalized (checksummed) form, but the
|
|
279
|
+
// V3 Tokens API can return them lower-cased. Lowercase both sides so the
|
|
280
|
+
// bypass is robust to address-case differences across data sources.
|
|
281
|
+
const customAssetIds = new Set(Object.values(customAssets ?? {})
|
|
282
|
+
.flat()
|
|
283
|
+
.map((id) => id.toLowerCase()));
|
|
284
|
+
// Always include native asset IDs from NetworkEnablementController
|
|
285
|
+
const nativeAssetIdsList = __classPrivateFieldGet(this, _TokenDataSource_getNativeAssetIds, "f").call(this);
|
|
286
|
+
const nativeAssetIds = new Set(nativeAssetIdsList.map((id) => id.toLowerCase()));
|
|
287
|
+
for (const nativeAssetId of nativeAssetIdsList) {
|
|
288
|
+
assetIdsNeedingMetadata.add(nativeAssetId);
|
|
289
|
+
}
|
|
290
|
+
// Also fetch metadata for detected assets that are missing it
|
|
291
|
+
if (response.detectedAssets) {
|
|
292
|
+
for (const detectedIds of Object.values(response.detectedAssets)) {
|
|
293
|
+
for (const assetId of detectedIds) {
|
|
294
|
+
// Skip if response already has metadata with image
|
|
295
|
+
const responseMetadata = response.assetsInfo?.[assetId];
|
|
296
|
+
if (responseMetadata?.image) {
|
|
297
|
+
continue;
|
|
298
|
+
}
|
|
299
|
+
// Skip if state already has metadata with image
|
|
300
|
+
const existingMetadata = stateMetadata[assetId];
|
|
301
|
+
if (existingMetadata?.image) {
|
|
302
|
+
continue;
|
|
303
|
+
}
|
|
304
|
+
// Skip staking contracts; we use built-in metadata and do not fetch from the tokens API
|
|
305
|
+
if ((0, index_js_2.isStakingContractAssetId)(assetId)) {
|
|
306
|
+
continue;
|
|
307
|
+
}
|
|
308
|
+
detectedAssetIds.add(assetId.toLowerCase());
|
|
309
|
+
assetIdsNeedingMetadata.add(assetId);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
// Also fetch metadata for balances that are missing it
|
|
314
|
+
if (response.assetsBalance) {
|
|
315
|
+
for (const accountBalances of Object.values(response.assetsBalance)) {
|
|
316
|
+
for (const assetId of Object.keys(accountBalances)) {
|
|
317
|
+
if (response.assetsInfo?.[assetId]?.image) {
|
|
318
|
+
continue;
|
|
319
|
+
}
|
|
320
|
+
if (stateMetadata[assetId]?.image) {
|
|
321
|
+
continue;
|
|
322
|
+
}
|
|
323
|
+
if ((0, index_js_2.isStakingContractAssetId)(assetId)) {
|
|
324
|
+
continue;
|
|
325
|
+
}
|
|
326
|
+
assetIdsNeedingMetadata.add(assetId);
|
|
327
|
+
// Only treat as a heal when DetectionMiddleware did not queue it
|
|
328
|
+
// as newly detected — those remain subject to spam filtering.
|
|
329
|
+
if (!detectedAssetIds.has(assetId.toLowerCase())) {
|
|
330
|
+
balanceHealAssetIds.add(assetId.toLowerCase());
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
if (assetIdsNeedingMetadata.size === 0) {
|
|
336
|
+
return next(ctx);
|
|
337
|
+
}
|
|
338
|
+
// Filter asset IDs to only include supported networks; load per-chain
|
|
339
|
+
// occurrence floors in parallel (Token API suggested floors).
|
|
340
|
+
const [supportedNetworks, suggestedOccurrenceFloors] = await Promise.all([
|
|
341
|
+
__classPrivateFieldGet(this, _TokenDataSource_instances, "m", _TokenDataSource_getSupportedNetworks).call(this),
|
|
342
|
+
__classPrivateFieldGet(this, _TokenDataSource_instances, "m", _TokenDataSource_getSuggestedOccurrenceFloors).call(this),
|
|
343
|
+
]);
|
|
344
|
+
const supportedAssetIds = __classPrivateFieldGet(this, _TokenDataSource_instances, "m", _TokenDataSource_filterAssetsByNetwork).call(this, [...assetIdsNeedingMetadata], supportedNetworks);
|
|
345
|
+
if (supportedAssetIds.length === 0) {
|
|
346
|
+
return next(ctx);
|
|
347
|
+
}
|
|
348
|
+
try {
|
|
349
|
+
const fetchOptions = {
|
|
350
|
+
includeIconUrl: true,
|
|
351
|
+
includeMarketData: true,
|
|
352
|
+
includeMetadata: true,
|
|
353
|
+
includeLabels: true,
|
|
354
|
+
includeRwaData: true,
|
|
355
|
+
includeAggregators: true,
|
|
356
|
+
includeOccurrences: true,
|
|
357
|
+
};
|
|
358
|
+
const metadataResponse = await (0, index_js_2.reduceInBatchesSerially)({
|
|
359
|
+
values: supportedAssetIds,
|
|
360
|
+
batchSize: TOKENS_API_BATCH_SIZE,
|
|
361
|
+
eachBatch: async (workingResult, batch) => {
|
|
362
|
+
const batchResponse = await (0, index_js_1.fetchWithTimeout)(() => __classPrivateFieldGet(this, _TokenDataSource_apiClient, "f").tokens.fetchV3Assets(batch, fetchOptions), __classPrivateFieldGet(this, _TokenDataSource_fetchTimeoutMs, "f"));
|
|
363
|
+
return [...workingResult, ...batchResponse];
|
|
364
|
+
},
|
|
365
|
+
initialResult: [],
|
|
366
|
+
});
|
|
367
|
+
// Split assets by chain type: EVM uses occurrence-count filtering;
|
|
368
|
+
// non-EVM non-native uses Blockaid; native assets are always allowed.
|
|
369
|
+
const occurrencesByAssetId = new Map(metadataResponse.map((a) => [a.assetId, a.occurrences]));
|
|
370
|
+
const evmErc20Ids = [];
|
|
371
|
+
const nonEvmTokenIds = [];
|
|
372
|
+
for (const assetData of metadataResponse) {
|
|
373
|
+
const assetId = assetData.assetId;
|
|
374
|
+
const { assetNamespace, chain } = (0, utils_1.parseCaipAssetType)(assetId);
|
|
375
|
+
if (nativeAssetIds.has(assetId.toLowerCase())) {
|
|
376
|
+
// Native assets are always kept — no filtering.
|
|
377
|
+
}
|
|
378
|
+
else if (assetNamespace === CaipAssetNamespace.Erc20 &&
|
|
379
|
+
chain.namespace === utils_1.KnownCaipNamespace.Eip155) {
|
|
380
|
+
evmErc20Ids.push(assetId);
|
|
381
|
+
}
|
|
382
|
+
else if (assetNamespace === CaipAssetNamespace.Token) {
|
|
383
|
+
nonEvmTokenIds.push(assetId);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
// EVM: require per-chain suggested occurrence floor (from Token API
|
|
387
|
+
// `/v1/suggestedOccurrenceFloors`, default {@link DEFAULT_OCCURRENCE_FLOOR})
|
|
388
|
+
// to suppress low-signal tokens. Tokens with no occurrence data
|
|
389
|
+
// (undefined) are treated the same as zero occurrences and filtered out.
|
|
390
|
+
// Custom assets (user-imported) bypass the occurrence filter — users
|
|
391
|
+
// can import whatever they want and we must keep their metadata even
|
|
392
|
+
// if the API has fewer aggregator hits than the floor.
|
|
393
|
+
// Balance-only heals also bypass — see `balanceHealAssetIds` below.
|
|
394
|
+
const allowedEvmIds = new Set(evmErc20Ids.filter((id) => customAssetIds.has(id.toLowerCase()) ||
|
|
395
|
+
balanceHealAssetIds.has(id.toLowerCase()) ||
|
|
396
|
+
(occurrencesByAssetId.get(id) ?? 0) >=
|
|
397
|
+
getOccurrenceFloorForAsset(id, suggestedOccurrenceFloors) ||
|
|
398
|
+
id.includes(`/erc20:${MUSD_ADDRESS_LOWERCASE}`)));
|
|
399
|
+
// Non-EVM: Blockaid bulk scan.
|
|
400
|
+
// Custom assets and balance-only heals bypass Blockaid filtering.
|
|
401
|
+
const nonEvmToScan = nonEvmTokenIds.filter((id) => !customAssetIds.has(id.toLowerCase()) &&
|
|
402
|
+
!balanceHealAssetIds.has(id.toLowerCase()));
|
|
403
|
+
const allowedNonEvmIds = new Set([
|
|
404
|
+
...nonEvmTokenIds.filter((id) => customAssetIds.has(id.toLowerCase()) ||
|
|
405
|
+
balanceHealAssetIds.has(id.toLowerCase())),
|
|
406
|
+
...(await __classPrivateFieldGet(this, _TokenDataSource_instances, "m", _TokenDataSource_filterBlockaidSpamTokens).call(this, nonEvmToScan)),
|
|
407
|
+
]);
|
|
408
|
+
// Start with every asset the API returned; only remove those that
|
|
409
|
+
// fail their respective filter (EVM occurrences / non-EVM Blockaid).
|
|
410
|
+
// Native (slip44) and unrecognised namespaces are kept (fail open).
|
|
411
|
+
const allowedAssetIds = new Set(metadataResponse.map((a) => a.assetId));
|
|
412
|
+
for (const id of evmErc20Ids) {
|
|
413
|
+
if (!allowedEvmIds.has(id)) {
|
|
414
|
+
allowedAssetIds.delete(id);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
for (const id of nonEvmTokenIds) {
|
|
418
|
+
if (!allowedNonEvmIds.has(id)) {
|
|
419
|
+
allowedAssetIds.delete(id);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
response.assetsInfo ?? (response.assetsInfo = {});
|
|
423
|
+
const filteredOutAssets = new Set();
|
|
424
|
+
for (const assetData of metadataResponse) {
|
|
425
|
+
if (!allowedAssetIds.has(assetData.assetId)) {
|
|
426
|
+
filteredOutAssets.add(assetData.assetId);
|
|
427
|
+
continue;
|
|
428
|
+
}
|
|
429
|
+
const caipAssetId = assetData.assetId;
|
|
430
|
+
response.assetsInfo[caipAssetId] = transformV3AssetResponseToMetadata(caipAssetId, assetData, __classPrivateFieldGet(this, _TokenDataSource_getAssetType, "f"));
|
|
431
|
+
}
|
|
432
|
+
if (filteredOutAssets.size > 0) {
|
|
433
|
+
if (response.assetsBalance) {
|
|
434
|
+
for (const accountBalances of Object.values(response.assetsBalance)) {
|
|
435
|
+
for (const assetId of filteredOutAssets) {
|
|
436
|
+
delete accountBalances[assetId];
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
if (response.detectedAssets) {
|
|
441
|
+
for (const [accountId, assetIds] of Object.entries(response.detectedAssets)) {
|
|
442
|
+
response.detectedAssets[accountId] = assetIds.filter((id) => !filteredOutAssets.has(id));
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
// Drop stub metadata (e.g. websocket-seeded name/symbol) for
|
|
446
|
+
// filtered-out assets so it never persists to state — a persisted
|
|
447
|
+
// stub would make the asset look "known" on the next update and
|
|
448
|
+
// let its balance skip spam filtering as a heal. Case-insensitive
|
|
449
|
+
// because the API may return asset IDs in a different case.
|
|
450
|
+
const filteredOutLower = new Set([...filteredOutAssets].map((id) => id.toLowerCase()));
|
|
451
|
+
for (const assetId of Object.keys(response.assetsInfo)) {
|
|
452
|
+
if (filteredOutLower.has(assetId.toLowerCase())) {
|
|
453
|
+
delete response.assetsInfo[assetId];
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
catch (error) {
|
|
459
|
+
log('Failed to fetch metadata', { error });
|
|
460
|
+
}
|
|
461
|
+
// Call next() at the end to continue the middleware chain
|
|
462
|
+
return next(ctx);
|
|
463
|
+
});
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
exports.TokenDataSource = TokenDataSource;
|
|
467
|
+
_TokenDataSource_apiClient = new WeakMap(), _TokenDataSource_getNativeAssetIds = new WeakMap(), _TokenDataSource_getAssetType = new WeakMap(), _TokenDataSource_messenger = new WeakMap(), _TokenDataSource_fetchTimeoutMs = new WeakMap(), _TokenDataSource_instances = new WeakSet(), _TokenDataSource_getSupportedNetworks =
|
|
468
|
+
/**
|
|
469
|
+
* Gets the supported networks from the API.
|
|
470
|
+
* Caching is handled by ApiPlatformClient.
|
|
471
|
+
*
|
|
472
|
+
* @returns Set of supported chain IDs in CAIP format
|
|
473
|
+
*/
|
|
474
|
+
async function _TokenDataSource_getSupportedNetworks() {
|
|
475
|
+
try {
|
|
476
|
+
// Use v2/supportedNetworks which returns CAIP chain IDs
|
|
477
|
+
// ApiPlatformClient handles caching
|
|
478
|
+
const response = await (0, index_js_1.fetchWithTimeout)(() => __classPrivateFieldGet(this, _TokenDataSource_apiClient, "f").tokens.fetchTokenV2SupportedNetworks(), __classPrivateFieldGet(this, _TokenDataSource_fetchTimeoutMs, "f"));
|
|
479
|
+
// Combine full and partial support networks
|
|
480
|
+
const allNetworks = [...response.fullSupport, ...response.partialSupport];
|
|
481
|
+
return new Set(allNetworks);
|
|
482
|
+
}
|
|
483
|
+
catch (error) {
|
|
484
|
+
log('Failed to fetch supported networks', { error });
|
|
485
|
+
return new Set();
|
|
486
|
+
}
|
|
487
|
+
}, _TokenDataSource_getSuggestedOccurrenceFloors =
|
|
488
|
+
/**
|
|
489
|
+
* Fetches per-chain suggested occurrence floors from Token API
|
|
490
|
+
* (`GET /v1/suggestedOccurrenceFloors`). Caching is handled by
|
|
491
|
+
* ApiPlatformClient. Fails open to an empty map so callers fall back to
|
|
492
|
+
* {@link DEFAULT_OCCURRENCE_FLOOR}.
|
|
493
|
+
*
|
|
494
|
+
* @returns Map of decimal chain ID → suggested occurrence floor.
|
|
495
|
+
*/
|
|
496
|
+
async function _TokenDataSource_getSuggestedOccurrenceFloors() {
|
|
497
|
+
try {
|
|
498
|
+
return await (0, index_js_1.fetchWithTimeout)(() => __classPrivateFieldGet(this, _TokenDataSource_apiClient, "f").token.fetchV1SuggestedOccurrenceFloors(), __classPrivateFieldGet(this, _TokenDataSource_fetchTimeoutMs, "f"));
|
|
499
|
+
}
|
|
500
|
+
catch (error) {
|
|
501
|
+
log('Failed to fetch suggested occurrence floors', { error });
|
|
502
|
+
return {};
|
|
503
|
+
}
|
|
504
|
+
}, _TokenDataSource_filterAssetsByNetwork = function _TokenDataSource_filterAssetsByNetwork(assetIds, supportedNetworks) {
|
|
505
|
+
return assetIds.filter((assetId) => {
|
|
506
|
+
try {
|
|
507
|
+
const parsed = (0, utils_1.parseCaipAssetType)(assetId);
|
|
508
|
+
// chainId is in format "eip155:1" or "tron:728126428"
|
|
509
|
+
// parsed.chain has namespace and reference properties
|
|
510
|
+
const chainId = `${parsed.chain.namespace}:${parsed.chain.reference}`;
|
|
511
|
+
return supportedNetworks.has(chainId);
|
|
512
|
+
}
|
|
513
|
+
catch {
|
|
514
|
+
// If we can't parse the asset ID, filter it out
|
|
515
|
+
return false;
|
|
516
|
+
}
|
|
517
|
+
});
|
|
518
|
+
}, _TokenDataSource_filterBlockaidSpamTokens =
|
|
519
|
+
/**
|
|
520
|
+
* Filters non-EVM fungible `token` assets flagged as malicious by Blockaid
|
|
521
|
+
* via `PhishingController:bulkScanTokens`. Only the `token` namespace (e.g.
|
|
522
|
+
* Solana mints) is scanned; native (`slip44`) and EVM assets are not handled
|
|
523
|
+
* here (EVM uses occurrence-count filtering instead). Fails open on error.
|
|
524
|
+
*
|
|
525
|
+
* @param assets - CAIP-19 asset IDs to filter (non-EVM only).
|
|
526
|
+
* @returns Asset IDs with malicious tokens removed.
|
|
527
|
+
*/
|
|
528
|
+
async function _TokenDataSource_filterBlockaidSpamTokens(assets) {
|
|
529
|
+
if (assets.length === 0) {
|
|
530
|
+
return assets;
|
|
531
|
+
}
|
|
532
|
+
const tokensByChain = {};
|
|
533
|
+
for (const asset of assets) {
|
|
534
|
+
try {
|
|
535
|
+
const { assetNamespace, assetReference, chain } = (0, utils_1.parseCaipAssetType)(asset);
|
|
536
|
+
if (assetNamespace === CaipAssetNamespace.Token) {
|
|
537
|
+
const chainName = chain.namespace;
|
|
538
|
+
if (!tokensByChain[chainName]) {
|
|
539
|
+
tokensByChain[chainName] = [];
|
|
540
|
+
}
|
|
541
|
+
tokensByChain[chainName].push({ asset, address: assetReference });
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
catch {
|
|
545
|
+
// Malformed or unsupported for bulk scan — keep asset (fail open)
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
if (Object.keys(tokensByChain).length === 0) {
|
|
549
|
+
return assets;
|
|
550
|
+
}
|
|
551
|
+
const rejectedAssets = new Set();
|
|
552
|
+
try {
|
|
553
|
+
for (const [chainId, tokenEntries] of Object.entries(tokensByChain)) {
|
|
554
|
+
const addresses = tokenEntries.map((entry) => entry.address);
|
|
555
|
+
const batches = [];
|
|
556
|
+
for (let i = 0; i < addresses.length; i += BULK_SCAN_BATCH_SIZE) {
|
|
557
|
+
batches.push(addresses.slice(i, i + BULK_SCAN_BATCH_SIZE));
|
|
558
|
+
}
|
|
559
|
+
const batchResults = await Promise.allSettled(batches.map((batch) => __classPrivateFieldGet(this, _TokenDataSource_messenger, "f").call('PhishingController:bulkScanTokens', {
|
|
560
|
+
chainId,
|
|
561
|
+
tokens: batch,
|
|
562
|
+
})));
|
|
563
|
+
const scanResponse = {};
|
|
564
|
+
for (const result of batchResults) {
|
|
565
|
+
if (result.status === 'fulfilled') {
|
|
566
|
+
Object.assign(scanResponse, result.value);
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
for (const entry of tokenEntries) {
|
|
570
|
+
const result = scanResponse[entry.address];
|
|
571
|
+
if (result?.result_type === phishing_controller_1.TokenScanResultType.Malicious) {
|
|
572
|
+
rejectedAssets.add(entry.asset);
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
catch (error) {
|
|
578
|
+
log('Blockaid bulk token scan failed; keeping all tokens', { error });
|
|
579
|
+
return assets;
|
|
580
|
+
}
|
|
581
|
+
return assets.filter((asset) => !rejectedAssets.has(asset));
|
|
582
|
+
};
|
|
583
|
+
//# sourceMappingURL=TokenDataSource.cjs.map
|