@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,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.clearFormatExchangeRatesForBridgeCacheForTesting = exports.formatExchangeRatesForBridge = void 0;
|
|
4
|
+
const util_1 = require("@ethereumjs/util");
|
|
5
|
+
const assets_controllers_1 = require("@metamask/assets-controllers");
|
|
6
|
+
const utils_1 = require("@metamask/utils");
|
|
7
|
+
const utils_2 = require("@metamask/utils");
|
|
8
|
+
const lodash_1 = require("lodash");
|
|
9
|
+
let lastCall = null;
|
|
10
|
+
/**
|
|
11
|
+
* Converts AssetsController state (assetsPrice, selectedCurrency) into the
|
|
12
|
+
* same format the bridge expects from MultichainAssetsRatesController,
|
|
13
|
+
* CurrencyRateController, and TokenRatesController so the bridge can use
|
|
14
|
+
* a single action when useAssetsControllerForRates is true.
|
|
15
|
+
*
|
|
16
|
+
* Memoized on input identity for BaseController state slices (`===`) and
|
|
17
|
+
* lodash `isEqual` for rebuilt maps (`nativeAssetIdentifiers`). Bridge quote
|
|
18
|
+
* / rate paths call this repeatedly while assets state is unchanged; recomputing
|
|
19
|
+
* runs keccak256 (`toChecksumAddress`) and CAIP parsing per priced asset.
|
|
20
|
+
*
|
|
21
|
+
* @param params - Conversion parameters.
|
|
22
|
+
* @returns Bridge-compatible conversionRates, currencyRates, marketData, currentCurrency.
|
|
23
|
+
*/
|
|
24
|
+
function formatExchangeRatesForBridge(params) {
|
|
25
|
+
if (lastCall?.params.assetsInfo === params.assetsInfo &&
|
|
26
|
+
lastCall.params.assetsPrice === params.assetsPrice &&
|
|
27
|
+
lastCall.params.selectedCurrency === params.selectedCurrency &&
|
|
28
|
+
lastCall.params.networkConfigurationsByChainId ===
|
|
29
|
+
params.networkConfigurationsByChainId &&
|
|
30
|
+
(0, lodash_1.isEqual)(lastCall.params.nativeAssetIdentifiers, params.nativeAssetIdentifiers)) {
|
|
31
|
+
return lastCall.result;
|
|
32
|
+
}
|
|
33
|
+
const result = computeExchangeRatesForBridge(params);
|
|
34
|
+
lastCall = { params, result };
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
exports.formatExchangeRatesForBridge = formatExchangeRatesForBridge;
|
|
38
|
+
/**
|
|
39
|
+
* Clears the {@link formatExchangeRatesForBridge} memoize cache. Exported for tests.
|
|
40
|
+
*/
|
|
41
|
+
function clearFormatExchangeRatesForBridgeCacheForTesting() {
|
|
42
|
+
lastCall = null;
|
|
43
|
+
}
|
|
44
|
+
exports.clearFormatExchangeRatesForBridgeCacheForTesting = clearFormatExchangeRatesForBridgeCacheForTesting;
|
|
45
|
+
/**
|
|
46
|
+
* Performs the actual exchange-rate conversion for
|
|
47
|
+
* {@link formatExchangeRatesForBridge}.
|
|
48
|
+
*
|
|
49
|
+
* @param params - Conversion parameters.
|
|
50
|
+
* @returns Bridge-compatible rates.
|
|
51
|
+
*/
|
|
52
|
+
function computeExchangeRatesForBridge(params) {
|
|
53
|
+
const { assetsInfo, assetsPrice, selectedCurrency, nativeAssetIdentifiers, networkConfigurationsByChainId = {}, } = params;
|
|
54
|
+
const conversionRates = {};
|
|
55
|
+
const currencyRates = {};
|
|
56
|
+
const marketData = {};
|
|
57
|
+
const currencyCaip = assets_controllers_1.MAP_CAIP_CURRENCIES[selectedCurrency.toLowerCase()];
|
|
58
|
+
if (!currencyCaip) {
|
|
59
|
+
return {
|
|
60
|
+
conversionRates: {},
|
|
61
|
+
currencyRates: {},
|
|
62
|
+
marketData: {},
|
|
63
|
+
currentCurrency: selectedCurrency,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
const fungibleAssetsPrice = Object.entries(assetsPrice).reduce((acc, [assetId, priceData]) => {
|
|
67
|
+
if (priceData.assetPriceType === 'fungible') {
|
|
68
|
+
acc[assetId] = priceData;
|
|
69
|
+
}
|
|
70
|
+
return acc;
|
|
71
|
+
}, {});
|
|
72
|
+
for (const [assetId, priceData] of Object.entries(fungibleAssetsPrice)) {
|
|
73
|
+
const { price, usdPrice, lastUpdated } = priceData;
|
|
74
|
+
if (price < 0) {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const lastUpdatedInSeconds = lastUpdated / 1000;
|
|
78
|
+
const expirationOffsetInSeconds = 60;
|
|
79
|
+
const expirationTime = lastUpdatedInSeconds + expirationOffsetInSeconds;
|
|
80
|
+
try {
|
|
81
|
+
const isNative = assetsInfo[assetId]?.type === 'native';
|
|
82
|
+
const parsed = (0, utils_2.parseCaipAssetType)(assetId);
|
|
83
|
+
const chainIdParsed = (0, utils_2.parseCaipChainId)(parsed.chainId);
|
|
84
|
+
if (chainIdParsed.namespace === utils_1.KnownCaipNamespace.Eip155) {
|
|
85
|
+
const chainIdHex = (0, utils_1.numberToHex)(parseInt(chainIdParsed.reference, 10));
|
|
86
|
+
const nativeAssetId = (isNative ? assetId : nativeAssetIdentifiers[parsed.chainId]);
|
|
87
|
+
const nativeCurrencySymbol = networkConfigurationsByChainId[chainIdHex]?.nativeCurrency;
|
|
88
|
+
const nativeAssetUsdPrice = nativeAssetId && fungibleAssetsPrice[nativeAssetId]?.usdPrice;
|
|
89
|
+
if (!nativeAssetId ||
|
|
90
|
+
!nativeCurrencySymbol ||
|
|
91
|
+
nativeAssetUsdPrice === undefined) {
|
|
92
|
+
// If we do not have a native asset for that chain or a price for it, the asset needs to be skipped
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
let tokenAddress;
|
|
96
|
+
if (parsed.assetNamespace === 'erc20') {
|
|
97
|
+
tokenAddress = (0, util_1.toChecksumAddress)(parsed.assetReference);
|
|
98
|
+
}
|
|
99
|
+
else if (isNative) {
|
|
100
|
+
tokenAddress = (0, util_1.toChecksumAddress)((0, assets_controllers_1.getNativeTokenAddress)(chainIdHex));
|
|
101
|
+
}
|
|
102
|
+
if (tokenAddress) {
|
|
103
|
+
const priceInNative = nativeAssetUsdPrice > 0 ? usdPrice / nativeAssetUsdPrice : usdPrice;
|
|
104
|
+
if (!marketData[chainIdHex]) {
|
|
105
|
+
marketData[chainIdHex] = {};
|
|
106
|
+
}
|
|
107
|
+
marketData[chainIdHex][tokenAddress] = {
|
|
108
|
+
...priceData,
|
|
109
|
+
price: priceInNative,
|
|
110
|
+
currency: nativeCurrencySymbol,
|
|
111
|
+
assetId,
|
|
112
|
+
chainId: chainIdHex,
|
|
113
|
+
tokenAddress,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
if (isNative) {
|
|
117
|
+
currencyRates[nativeCurrencySymbol] = {
|
|
118
|
+
conversionDate: lastUpdatedInSeconds,
|
|
119
|
+
conversionRate: price,
|
|
120
|
+
usdConversionRate: usdPrice,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
conversionRates[assetId] = {
|
|
126
|
+
rate: String(price),
|
|
127
|
+
currency: currencyCaip,
|
|
128
|
+
conversionTime: lastUpdatedInSeconds,
|
|
129
|
+
expirationTime,
|
|
130
|
+
marketData: {
|
|
131
|
+
fungible: true,
|
|
132
|
+
allTimeHigh: `${priceData.allTimeHigh}`,
|
|
133
|
+
allTimeLow: `${priceData.allTimeLow}`,
|
|
134
|
+
circulatingSupply: `${priceData.circulatingSupply}`,
|
|
135
|
+
marketCap: `${priceData.marketCap}`,
|
|
136
|
+
totalVolume: `${priceData.totalVolume}`,
|
|
137
|
+
pricePercentChange: {
|
|
138
|
+
PT1H: priceData.pricePercentChange1h,
|
|
139
|
+
P1D: priceData.pricePercentChange1d,
|
|
140
|
+
P7D: priceData.pricePercentChange7d,
|
|
141
|
+
P14D: priceData.pricePercentChange14d,
|
|
142
|
+
P30D: priceData.pricePercentChange30d,
|
|
143
|
+
P200D: priceData.pricePercentChange200d,
|
|
144
|
+
P1Y: priceData.pricePercentChange1y,
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
// Skip malformed asset IDs
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return {
|
|
155
|
+
conversionRates,
|
|
156
|
+
currencyRates,
|
|
157
|
+
marketData,
|
|
158
|
+
currentCurrency: selectedCurrency,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=formatExchangeRatesForBridge.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatExchangeRatesForBridge.cjs","sourceRoot":"","sources":["../../src/utils/formatExchangeRatesForBridge.ts"],"names":[],"mappings":"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","sourcesContent":["import { toChecksumAddress } from '@ethereumjs/util';\nimport {\n CurrencyRateState,\n MAP_CAIP_CURRENCIES,\n MarketDataDetails,\n MultichainAssetsRatesControllerState,\n TokenRatesControllerState,\n getNativeTokenAddress,\n} from '@metamask/assets-controllers';\nimport { Hex, KnownCaipNamespace, numberToHex } from '@metamask/utils';\nimport { parseCaipAssetType, parseCaipChainId } from '@metamask/utils';\nimport { isEqual } from 'lodash';\n\nimport type {\n AssetMetadata,\n AssetPrice,\n FungibleAssetPrice,\n Caip19AssetId,\n} from '../types.js';\n\n/**\n * Exchange rates in the format expected by the bridge controller:\n * conversionRates (MultichainAssetsRatesController) + currencyRates (CurrencyRateController)\n * + marketData (TokenRatesController) + currentCurrency.\n */\nexport type BridgeExchangeRatesFormat = {\n conversionRates: MultichainAssetsRatesControllerState['conversionRates'];\n currencyRates: CurrencyRateState['currencyRates'];\n marketData: TokenRatesControllerState['marketData'];\n currentCurrency: string;\n};\n\n/** Parameters accepted by {@link formatExchangeRatesForBridge}. */\nexport type FormatExchangeRatesForBridgeParams = {\n assetsInfo: Record<string, AssetMetadata>;\n assetsPrice: Record<string, AssetPrice>;\n selectedCurrency: string;\n nativeAssetIdentifiers: Record<string, string>;\n networkConfigurationsByChainId?: Record<string, { nativeCurrency?: string }>;\n};\n\nlet lastCall: {\n params: FormatExchangeRatesForBridgeParams;\n result: BridgeExchangeRatesFormat;\n} | null = null;\n\n/**\n * Converts AssetsController state (assetsPrice, selectedCurrency) into the\n * same format the bridge expects from MultichainAssetsRatesController,\n * CurrencyRateController, and TokenRatesController so the bridge can use\n * a single action when useAssetsControllerForRates is true.\n *\n * Memoized on input identity for BaseController state slices (`===`) and\n * lodash `isEqual` for rebuilt maps (`nativeAssetIdentifiers`). Bridge quote\n * / rate paths call this repeatedly while assets state is unchanged; recomputing\n * runs keccak256 (`toChecksumAddress`) and CAIP parsing per priced asset.\n *\n * @param params - Conversion parameters.\n * @returns Bridge-compatible conversionRates, currencyRates, marketData, currentCurrency.\n */\nexport function formatExchangeRatesForBridge(\n params: FormatExchangeRatesForBridgeParams,\n): BridgeExchangeRatesFormat {\n if (\n lastCall?.params.assetsInfo === params.assetsInfo &&\n lastCall.params.assetsPrice === params.assetsPrice &&\n lastCall.params.selectedCurrency === params.selectedCurrency &&\n lastCall.params.networkConfigurationsByChainId ===\n params.networkConfigurationsByChainId &&\n isEqual(\n lastCall.params.nativeAssetIdentifiers,\n params.nativeAssetIdentifiers,\n )\n ) {\n return lastCall.result;\n }\n\n const result = computeExchangeRatesForBridge(params);\n lastCall = { params, result };\n return result;\n}\n\n/**\n * Clears the {@link formatExchangeRatesForBridge} memoize cache. Exported for tests.\n */\nexport function clearFormatExchangeRatesForBridgeCacheForTesting(): void {\n lastCall = null;\n}\n\n/**\n * Performs the actual exchange-rate conversion for\n * {@link formatExchangeRatesForBridge}.\n *\n * @param params - Conversion parameters.\n * @returns Bridge-compatible rates.\n */\nfunction computeExchangeRatesForBridge(\n params: FormatExchangeRatesForBridgeParams,\n): BridgeExchangeRatesFormat {\n const {\n assetsInfo,\n assetsPrice,\n selectedCurrency,\n nativeAssetIdentifiers,\n networkConfigurationsByChainId = {},\n } = params;\n const conversionRates: MultichainAssetsRatesControllerState['conversionRates'] =\n {};\n const currencyRates: CurrencyRateState['currencyRates'] = {};\n const marketData: TokenRatesControllerState['marketData'] = {};\n\n const currencyCaip = MAP_CAIP_CURRENCIES[selectedCurrency.toLowerCase()];\n if (!currencyCaip) {\n return {\n conversionRates: {},\n currencyRates: {},\n marketData: {},\n currentCurrency: selectedCurrency,\n };\n }\n\n const fungibleAssetsPrice = Object.entries(assetsPrice).reduce<\n Record<Caip19AssetId, FungibleAssetPrice>\n >((acc, [assetId, priceData]) => {\n if (priceData.assetPriceType === 'fungible') {\n acc[assetId as Caip19AssetId] = priceData;\n }\n return acc;\n }, {});\n\n for (const [assetId, priceData] of Object.entries(fungibleAssetsPrice)) {\n const { price, usdPrice, lastUpdated } = priceData;\n if (price < 0) {\n continue;\n }\n\n const lastUpdatedInSeconds = lastUpdated / 1000;\n const expirationOffsetInSeconds = 60;\n const expirationTime = lastUpdatedInSeconds + expirationOffsetInSeconds;\n\n try {\n const isNative = assetsInfo[assetId]?.type === 'native';\n const parsed = parseCaipAssetType(assetId as Caip19AssetId);\n const chainIdParsed = parseCaipChainId(parsed.chainId);\n\n if (chainIdParsed.namespace === KnownCaipNamespace.Eip155) {\n const chainIdHex = numberToHex(parseInt(chainIdParsed.reference, 10));\n\n const nativeAssetId = (\n isNative ? assetId : nativeAssetIdentifiers[parsed.chainId]\n ) as Caip19AssetId | undefined;\n\n const nativeCurrencySymbol =\n networkConfigurationsByChainId[chainIdHex]?.nativeCurrency;\n\n const nativeAssetUsdPrice =\n nativeAssetId && fungibleAssetsPrice[nativeAssetId]?.usdPrice;\n\n if (\n !nativeAssetId ||\n !nativeCurrencySymbol ||\n nativeAssetUsdPrice === undefined\n ) {\n // If we do not have a native asset for that chain or a price for it, the asset needs to be skipped\n continue;\n }\n\n let tokenAddress: Hex | undefined;\n if (parsed.assetNamespace === 'erc20') {\n tokenAddress = toChecksumAddress(parsed.assetReference);\n } else if (isNative) {\n tokenAddress = toChecksumAddress(getNativeTokenAddress(chainIdHex));\n }\n\n if (tokenAddress) {\n const priceInNative =\n nativeAssetUsdPrice > 0 ? usdPrice / nativeAssetUsdPrice : usdPrice;\n if (!marketData[chainIdHex]) {\n marketData[chainIdHex] = {};\n }\n marketData[chainIdHex][tokenAddress] = {\n ...priceData,\n price: priceInNative,\n currency: nativeCurrencySymbol,\n assetId,\n chainId: chainIdHex,\n tokenAddress,\n } as MarketDataDetails;\n }\n\n if (isNative) {\n currencyRates[nativeCurrencySymbol] = {\n conversionDate: lastUpdatedInSeconds,\n conversionRate: price,\n usdConversionRate: usdPrice,\n };\n }\n } else {\n conversionRates[assetId as Caip19AssetId] = {\n rate: String(price),\n currency: currencyCaip,\n conversionTime: lastUpdatedInSeconds,\n expirationTime,\n marketData: {\n fungible: true,\n allTimeHigh: `${priceData.allTimeHigh}`,\n allTimeLow: `${priceData.allTimeLow}`,\n circulatingSupply: `${priceData.circulatingSupply}`,\n marketCap: `${priceData.marketCap}`,\n totalVolume: `${priceData.totalVolume}`,\n pricePercentChange: {\n PT1H: priceData.pricePercentChange1h as number,\n P1D: priceData.pricePercentChange1d as number,\n P7D: priceData.pricePercentChange7d as number,\n P14D: priceData.pricePercentChange14d as number,\n P30D: priceData.pricePercentChange30d as number,\n P200D: priceData.pricePercentChange200d as number,\n P1Y: priceData.pricePercentChange1y as number,\n },\n },\n } as MultichainAssetsRatesControllerState['conversionRates'][Caip19AssetId];\n }\n } catch {\n // Skip malformed asset IDs\n }\n }\n\n return {\n conversionRates,\n currencyRates,\n marketData,\n currentCurrency: selectedCurrency,\n };\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { CurrencyRateState, MultichainAssetsRatesControllerState, TokenRatesControllerState } from
|
|
2
|
-
import type { AssetMetadata, AssetPrice } from
|
|
1
|
+
import { CurrencyRateState, MultichainAssetsRatesControllerState, TokenRatesControllerState } from "@metamask/assets-controllers";
|
|
2
|
+
import type { AssetMetadata, AssetPrice } from "../types.cjs";
|
|
3
3
|
/**
|
|
4
4
|
* Exchange rates in the format expected by the bridge controller:
|
|
5
5
|
* conversionRates (MultichainAssetsRatesController) + currencyRates (CurrencyRateController)
|
|
@@ -40,4 +40,4 @@ export declare function formatExchangeRatesForBridge(params: FormatExchangeRates
|
|
|
40
40
|
* Clears the {@link formatExchangeRatesForBridge} memoize cache. Exported for tests.
|
|
41
41
|
*/
|
|
42
42
|
export declare function clearFormatExchangeRatesForBridgeCacheForTesting(): void;
|
|
43
|
-
//# sourceMappingURL=formatExchangeRatesForBridge.d.
|
|
43
|
+
//# sourceMappingURL=formatExchangeRatesForBridge.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatExchangeRatesForBridge.d.cts","sourceRoot":"","sources":["../../src/utils/formatExchangeRatesForBridge.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EAGjB,oCAAoC,EACpC,yBAAyB,EAE1B,qCAAqC;AAKtC,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EAGX,qBAAoB;AAErB;;;;GAIG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,eAAe,EAAE,oCAAoC,CAAC,iBAAiB,CAAC,CAAC;IACzE,aAAa,EAAE,iBAAiB,CAAC,eAAe,CAAC,CAAC;IAClD,UAAU,EAAE,yBAAyB,CAAC,YAAY,CAAC,CAAC;IACpD,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,mEAAmE;AACnE,MAAM,MAAM,kCAAkC,GAAG;IAC/C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,8BAA8B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9E,CAAC;AAOF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,kCAAkC,GACzC,yBAAyB,CAkB3B;AAED;;GAEG;AACH,wBAAgB,gDAAgD,IAAI,IAAI,CAEvE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { CurrencyRateState, MultichainAssetsRatesControllerState, TokenRatesControllerState } from "@metamask/assets-controllers";
|
|
2
|
+
import type { AssetMetadata, AssetPrice } from "../types.mjs";
|
|
3
|
+
/**
|
|
4
|
+
* Exchange rates in the format expected by the bridge controller:
|
|
5
|
+
* conversionRates (MultichainAssetsRatesController) + currencyRates (CurrencyRateController)
|
|
6
|
+
* + marketData (TokenRatesController) + currentCurrency.
|
|
7
|
+
*/
|
|
8
|
+
export type BridgeExchangeRatesFormat = {
|
|
9
|
+
conversionRates: MultichainAssetsRatesControllerState['conversionRates'];
|
|
10
|
+
currencyRates: CurrencyRateState['currencyRates'];
|
|
11
|
+
marketData: TokenRatesControllerState['marketData'];
|
|
12
|
+
currentCurrency: string;
|
|
13
|
+
};
|
|
14
|
+
/** Parameters accepted by {@link formatExchangeRatesForBridge}. */
|
|
15
|
+
export type FormatExchangeRatesForBridgeParams = {
|
|
16
|
+
assetsInfo: Record<string, AssetMetadata>;
|
|
17
|
+
assetsPrice: Record<string, AssetPrice>;
|
|
18
|
+
selectedCurrency: string;
|
|
19
|
+
nativeAssetIdentifiers: Record<string, string>;
|
|
20
|
+
networkConfigurationsByChainId?: Record<string, {
|
|
21
|
+
nativeCurrency?: string;
|
|
22
|
+
}>;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Converts AssetsController state (assetsPrice, selectedCurrency) into the
|
|
26
|
+
* same format the bridge expects from MultichainAssetsRatesController,
|
|
27
|
+
* CurrencyRateController, and TokenRatesController so the bridge can use
|
|
28
|
+
* a single action when useAssetsControllerForRates is true.
|
|
29
|
+
*
|
|
30
|
+
* Memoized on input identity for BaseController state slices (`===`) and
|
|
31
|
+
* lodash `isEqual` for rebuilt maps (`nativeAssetIdentifiers`). Bridge quote
|
|
32
|
+
* / rate paths call this repeatedly while assets state is unchanged; recomputing
|
|
33
|
+
* runs keccak256 (`toChecksumAddress`) and CAIP parsing per priced asset.
|
|
34
|
+
*
|
|
35
|
+
* @param params - Conversion parameters.
|
|
36
|
+
* @returns Bridge-compatible conversionRates, currencyRates, marketData, currentCurrency.
|
|
37
|
+
*/
|
|
38
|
+
export declare function formatExchangeRatesForBridge(params: FormatExchangeRatesForBridgeParams): BridgeExchangeRatesFormat;
|
|
39
|
+
/**
|
|
40
|
+
* Clears the {@link formatExchangeRatesForBridge} memoize cache. Exported for tests.
|
|
41
|
+
*/
|
|
42
|
+
export declare function clearFormatExchangeRatesForBridgeCacheForTesting(): void;
|
|
43
|
+
//# sourceMappingURL=formatExchangeRatesForBridge.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatExchangeRatesForBridge.d.mts","sourceRoot":"","sources":["../../src/utils/formatExchangeRatesForBridge.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EAGjB,oCAAoC,EACpC,yBAAyB,EAE1B,qCAAqC;AAKtC,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EAGX,qBAAoB;AAErB;;;;GAIG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,eAAe,EAAE,oCAAoC,CAAC,iBAAiB,CAAC,CAAC;IACzE,aAAa,EAAE,iBAAiB,CAAC,eAAe,CAAC,CAAC;IAClD,UAAU,EAAE,yBAAyB,CAAC,YAAY,CAAC,CAAC;IACpD,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,mEAAmE;AACnE,MAAM,MAAM,kCAAkC,GAAG;IAC/C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,8BAA8B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9E,CAAC;AAOF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,kCAAkC,GACzC,yBAAyB,CAkB3B;AAED;;GAEG;AACH,wBAAgB,gDAAgD,IAAI,IAAI,CAEvE"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { toChecksumAddress } from
|
|
2
|
-
import { MAP_CAIP_CURRENCIES, getNativeTokenAddress
|
|
3
|
-
import { KnownCaipNamespace, numberToHex } from
|
|
4
|
-
import { parseCaipAssetType, parseCaipChainId } from
|
|
5
|
-
import
|
|
1
|
+
import { toChecksumAddress } from "@ethereumjs/util";
|
|
2
|
+
import { MAP_CAIP_CURRENCIES, getNativeTokenAddress } from "@metamask/assets-controllers";
|
|
3
|
+
import { KnownCaipNamespace, numberToHex } from "@metamask/utils";
|
|
4
|
+
import { parseCaipAssetType, parseCaipChainId } from "@metamask/utils";
|
|
5
|
+
import $lodash from "lodash";
|
|
6
|
+
const { isEqual } = $lodash;
|
|
6
7
|
let lastCall = null;
|
|
7
8
|
/**
|
|
8
9
|
* Converts AssetsController state (assetsPrice, selectedCurrency) into the
|
|
@@ -153,4 +154,4 @@ function computeExchangeRatesForBridge(params) {
|
|
|
153
154
|
currentCurrency: selectedCurrency,
|
|
154
155
|
};
|
|
155
156
|
}
|
|
156
|
-
//# sourceMappingURL=formatExchangeRatesForBridge.
|
|
157
|
+
//# sourceMappingURL=formatExchangeRatesForBridge.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatExchangeRatesForBridge.mjs","sourceRoot":"","sources":["../../src/utils/formatExchangeRatesForBridge.ts"],"names":[],"mappings":"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","sourcesContent":["import { toChecksumAddress } from '@ethereumjs/util';\nimport {\n CurrencyRateState,\n MAP_CAIP_CURRENCIES,\n MarketDataDetails,\n MultichainAssetsRatesControllerState,\n TokenRatesControllerState,\n getNativeTokenAddress,\n} from '@metamask/assets-controllers';\nimport { Hex, KnownCaipNamespace, numberToHex } from '@metamask/utils';\nimport { parseCaipAssetType, parseCaipChainId } from '@metamask/utils';\nimport { isEqual } from 'lodash';\n\nimport type {\n AssetMetadata,\n AssetPrice,\n FungibleAssetPrice,\n Caip19AssetId,\n} from '../types.js';\n\n/**\n * Exchange rates in the format expected by the bridge controller:\n * conversionRates (MultichainAssetsRatesController) + currencyRates (CurrencyRateController)\n * + marketData (TokenRatesController) + currentCurrency.\n */\nexport type BridgeExchangeRatesFormat = {\n conversionRates: MultichainAssetsRatesControllerState['conversionRates'];\n currencyRates: CurrencyRateState['currencyRates'];\n marketData: TokenRatesControllerState['marketData'];\n currentCurrency: string;\n};\n\n/** Parameters accepted by {@link formatExchangeRatesForBridge}. */\nexport type FormatExchangeRatesForBridgeParams = {\n assetsInfo: Record<string, AssetMetadata>;\n assetsPrice: Record<string, AssetPrice>;\n selectedCurrency: string;\n nativeAssetIdentifiers: Record<string, string>;\n networkConfigurationsByChainId?: Record<string, { nativeCurrency?: string }>;\n};\n\nlet lastCall: {\n params: FormatExchangeRatesForBridgeParams;\n result: BridgeExchangeRatesFormat;\n} | null = null;\n\n/**\n * Converts AssetsController state (assetsPrice, selectedCurrency) into the\n * same format the bridge expects from MultichainAssetsRatesController,\n * CurrencyRateController, and TokenRatesController so the bridge can use\n * a single action when useAssetsControllerForRates is true.\n *\n * Memoized on input identity for BaseController state slices (`===`) and\n * lodash `isEqual` for rebuilt maps (`nativeAssetIdentifiers`). Bridge quote\n * / rate paths call this repeatedly while assets state is unchanged; recomputing\n * runs keccak256 (`toChecksumAddress`) and CAIP parsing per priced asset.\n *\n * @param params - Conversion parameters.\n * @returns Bridge-compatible conversionRates, currencyRates, marketData, currentCurrency.\n */\nexport function formatExchangeRatesForBridge(\n params: FormatExchangeRatesForBridgeParams,\n): BridgeExchangeRatesFormat {\n if (\n lastCall?.params.assetsInfo === params.assetsInfo &&\n lastCall.params.assetsPrice === params.assetsPrice &&\n lastCall.params.selectedCurrency === params.selectedCurrency &&\n lastCall.params.networkConfigurationsByChainId ===\n params.networkConfigurationsByChainId &&\n isEqual(\n lastCall.params.nativeAssetIdentifiers,\n params.nativeAssetIdentifiers,\n )\n ) {\n return lastCall.result;\n }\n\n const result = computeExchangeRatesForBridge(params);\n lastCall = { params, result };\n return result;\n}\n\n/**\n * Clears the {@link formatExchangeRatesForBridge} memoize cache. Exported for tests.\n */\nexport function clearFormatExchangeRatesForBridgeCacheForTesting(): void {\n lastCall = null;\n}\n\n/**\n * Performs the actual exchange-rate conversion for\n * {@link formatExchangeRatesForBridge}.\n *\n * @param params - Conversion parameters.\n * @returns Bridge-compatible rates.\n */\nfunction computeExchangeRatesForBridge(\n params: FormatExchangeRatesForBridgeParams,\n): BridgeExchangeRatesFormat {\n const {\n assetsInfo,\n assetsPrice,\n selectedCurrency,\n nativeAssetIdentifiers,\n networkConfigurationsByChainId = {},\n } = params;\n const conversionRates: MultichainAssetsRatesControllerState['conversionRates'] =\n {};\n const currencyRates: CurrencyRateState['currencyRates'] = {};\n const marketData: TokenRatesControllerState['marketData'] = {};\n\n const currencyCaip = MAP_CAIP_CURRENCIES[selectedCurrency.toLowerCase()];\n if (!currencyCaip) {\n return {\n conversionRates: {},\n currencyRates: {},\n marketData: {},\n currentCurrency: selectedCurrency,\n };\n }\n\n const fungibleAssetsPrice = Object.entries(assetsPrice).reduce<\n Record<Caip19AssetId, FungibleAssetPrice>\n >((acc, [assetId, priceData]) => {\n if (priceData.assetPriceType === 'fungible') {\n acc[assetId as Caip19AssetId] = priceData;\n }\n return acc;\n }, {});\n\n for (const [assetId, priceData] of Object.entries(fungibleAssetsPrice)) {\n const { price, usdPrice, lastUpdated } = priceData;\n if (price < 0) {\n continue;\n }\n\n const lastUpdatedInSeconds = lastUpdated / 1000;\n const expirationOffsetInSeconds = 60;\n const expirationTime = lastUpdatedInSeconds + expirationOffsetInSeconds;\n\n try {\n const isNative = assetsInfo[assetId]?.type === 'native';\n const parsed = parseCaipAssetType(assetId as Caip19AssetId);\n const chainIdParsed = parseCaipChainId(parsed.chainId);\n\n if (chainIdParsed.namespace === KnownCaipNamespace.Eip155) {\n const chainIdHex = numberToHex(parseInt(chainIdParsed.reference, 10));\n\n const nativeAssetId = (\n isNative ? assetId : nativeAssetIdentifiers[parsed.chainId]\n ) as Caip19AssetId | undefined;\n\n const nativeCurrencySymbol =\n networkConfigurationsByChainId[chainIdHex]?.nativeCurrency;\n\n const nativeAssetUsdPrice =\n nativeAssetId && fungibleAssetsPrice[nativeAssetId]?.usdPrice;\n\n if (\n !nativeAssetId ||\n !nativeCurrencySymbol ||\n nativeAssetUsdPrice === undefined\n ) {\n // If we do not have a native asset for that chain or a price for it, the asset needs to be skipped\n continue;\n }\n\n let tokenAddress: Hex | undefined;\n if (parsed.assetNamespace === 'erc20') {\n tokenAddress = toChecksumAddress(parsed.assetReference);\n } else if (isNative) {\n tokenAddress = toChecksumAddress(getNativeTokenAddress(chainIdHex));\n }\n\n if (tokenAddress) {\n const priceInNative =\n nativeAssetUsdPrice > 0 ? usdPrice / nativeAssetUsdPrice : usdPrice;\n if (!marketData[chainIdHex]) {\n marketData[chainIdHex] = {};\n }\n marketData[chainIdHex][tokenAddress] = {\n ...priceData,\n price: priceInNative,\n currency: nativeCurrencySymbol,\n assetId,\n chainId: chainIdHex,\n tokenAddress,\n } as MarketDataDetails;\n }\n\n if (isNative) {\n currencyRates[nativeCurrencySymbol] = {\n conversionDate: lastUpdatedInSeconds,\n conversionRate: price,\n usdConversionRate: usdPrice,\n };\n }\n } else {\n conversionRates[assetId as Caip19AssetId] = {\n rate: String(price),\n currency: currencyCaip,\n conversionTime: lastUpdatedInSeconds,\n expirationTime,\n marketData: {\n fungible: true,\n allTimeHigh: `${priceData.allTimeHigh}`,\n allTimeLow: `${priceData.allTimeLow}`,\n circulatingSupply: `${priceData.circulatingSupply}`,\n marketCap: `${priceData.marketCap}`,\n totalVolume: `${priceData.totalVolume}`,\n pricePercentChange: {\n PT1H: priceData.pricePercentChange1h as number,\n P1D: priceData.pricePercentChange1d as number,\n P7D: priceData.pricePercentChange7d as number,\n P14D: priceData.pricePercentChange14d as number,\n P30D: priceData.pricePercentChange30d as number,\n P200D: priceData.pricePercentChange200d as number,\n P1Y: priceData.pricePercentChange1y as number,\n },\n },\n } as MultichainAssetsRatesControllerState['conversionRates'][Caip19AssetId];\n }\n } catch {\n // Skip malformed asset IDs\n }\n }\n\n return {\n conversionRates,\n currencyRates,\n marketData,\n currentCurrency: selectedCurrency,\n };\n}\n"]}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.clearFormatStateForTransactionPayCacheForTesting = exports.formatStateForTransactionPay = void 0;
|
|
4
|
+
const util_1 = require("@ethereumjs/util");
|
|
5
|
+
const assets_controllers_1 = require("@metamask/assets-controllers");
|
|
6
|
+
const utils_1 = require("@metamask/utils");
|
|
7
|
+
const utils_2 = require("@metamask/utils");
|
|
8
|
+
const lodash_1 = require("lodash");
|
|
9
|
+
const formatExchangeRatesForBridge_js_1 = require("./formatExchangeRatesForBridge.cjs");
|
|
10
|
+
function amountToHex(amount) {
|
|
11
|
+
const hexString = BigInt(amount).toString(16);
|
|
12
|
+
return `0x${hexString}`;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Determines whether two sets of {@link formatStateForTransactionPay}
|
|
16
|
+
* parameters are identical for memoization purposes.
|
|
17
|
+
*
|
|
18
|
+
* State slices (`assetsBalance`, `assetsInfo`, `assetsPrice`,
|
|
19
|
+
* `networkConfigurationsByChainId`) are compared by reference since
|
|
20
|
+
* BaseController state updates are immutable. The `accounts` and
|
|
21
|
+
* `nativeAssetIdentifiers` inputs are rebuilt on every call, so they are
|
|
22
|
+
* compared by value instead.
|
|
23
|
+
*
|
|
24
|
+
* @param a - Previous parameters.
|
|
25
|
+
* @param b - Next parameters.
|
|
26
|
+
* @returns True if the parameters are identical.
|
|
27
|
+
*/
|
|
28
|
+
function isTransactionPayParamsIdentical(a, b) {
|
|
29
|
+
return (a.assetsBalance === b.assetsBalance &&
|
|
30
|
+
a.assetsInfo === b.assetsInfo &&
|
|
31
|
+
a.assetsPrice === b.assetsPrice &&
|
|
32
|
+
a.selectedCurrency === b.selectedCurrency &&
|
|
33
|
+
a.networkConfigurationsByChainId === b.networkConfigurationsByChainId &&
|
|
34
|
+
(0, lodash_1.isEqual)(a.accounts, b.accounts) &&
|
|
35
|
+
(0, lodash_1.isEqual)(a.nativeAssetIdentifiers, b.nativeAssetIdentifiers));
|
|
36
|
+
}
|
|
37
|
+
function getAmountFromBalance(balance) {
|
|
38
|
+
return typeof balance === 'object' && balance !== null && 'amount' in balance
|
|
39
|
+
? String(balance.amount)
|
|
40
|
+
: '0';
|
|
41
|
+
}
|
|
42
|
+
let lastCall = null;
|
|
43
|
+
/**
|
|
44
|
+
* Converts AssetsController state into the legacy format consumed by
|
|
45
|
+
* transaction-pay-controller (TokenBalancesController, AccountTrackerController,
|
|
46
|
+
* TokensController, TokenRatesController, CurrencyRateController shapes).
|
|
47
|
+
*
|
|
48
|
+
* The last result is memoized on input identity: this function is invoked (via
|
|
49
|
+
* `AssetsController:getStateForTransactionPay`) on every
|
|
50
|
+
* `TransactionController:stateChange`, but its inputs only change when the
|
|
51
|
+
* assets pipeline updates. Recomputing runs keccak256 (`toChecksumAddress`)
|
|
52
|
+
* per asset per call, which dominates CPU profiles during transaction
|
|
53
|
+
* approval.
|
|
54
|
+
*
|
|
55
|
+
* @param params - Conversion parameters.
|
|
56
|
+
* @returns Legacy-compatible state for transaction-pay-controller.
|
|
57
|
+
*/
|
|
58
|
+
function formatStateForTransactionPay(params) {
|
|
59
|
+
if (lastCall && isTransactionPayParamsIdentical(lastCall.params, params)) {
|
|
60
|
+
return lastCall.result;
|
|
61
|
+
}
|
|
62
|
+
const result = computeStateForTransactionPay(params);
|
|
63
|
+
lastCall = { params, result: Object.freeze(result) };
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
exports.formatStateForTransactionPay = formatStateForTransactionPay;
|
|
67
|
+
/**
|
|
68
|
+
* Clears the {@link formatStateForTransactionPay} memoize cache. Exported for tests.
|
|
69
|
+
*/
|
|
70
|
+
function clearFormatStateForTransactionPayCacheForTesting() {
|
|
71
|
+
lastCall = null;
|
|
72
|
+
}
|
|
73
|
+
exports.clearFormatStateForTransactionPayCacheForTesting = clearFormatStateForTransactionPayCacheForTesting;
|
|
74
|
+
/**
|
|
75
|
+
* Performs the actual state conversion for
|
|
76
|
+
* {@link formatStateForTransactionPay}.
|
|
77
|
+
*
|
|
78
|
+
* @param params - Conversion parameters.
|
|
79
|
+
* @returns Legacy-compatible state for transaction-pay-controller.
|
|
80
|
+
*/
|
|
81
|
+
function computeStateForTransactionPay(params) {
|
|
82
|
+
var _a, _b;
|
|
83
|
+
const { assetsBalance, assetsInfo, assetsPrice, selectedCurrency, accounts, nativeAssetIdentifiers, networkConfigurationsByChainId = {}, } = params;
|
|
84
|
+
const tokenBalances = {};
|
|
85
|
+
const accountsByChainId = {};
|
|
86
|
+
const allTokensByChain = {};
|
|
87
|
+
for (const account of accounts) {
|
|
88
|
+
const accountAddressLower = account.address.toLowerCase();
|
|
89
|
+
const accountBalances = assetsBalance[account.id];
|
|
90
|
+
if (!accountBalances) {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
for (const [assetId, balance] of Object.entries(accountBalances)) {
|
|
94
|
+
try {
|
|
95
|
+
const parsed = (0, utils_2.parseCaipAssetType)(assetId);
|
|
96
|
+
const chainIdParsed = (0, utils_2.parseCaipChainId)(parsed.chainId);
|
|
97
|
+
if (chainIdParsed.namespace !== 'eip155') {
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
const chainIdHex = (0, utils_1.numberToHex)(parseInt(chainIdParsed.reference, 10));
|
|
101
|
+
const amount = getAmountFromBalance(balance);
|
|
102
|
+
const balanceHex = amountToHex(amount);
|
|
103
|
+
if (assetsInfo[assetId]?.type === 'native') {
|
|
104
|
+
const nativeAddress = (0, util_1.toChecksumAddress)((0, assets_controllers_1.getNativeTokenAddress)(chainIdHex));
|
|
105
|
+
const checksumAddress = (0, util_1.toChecksumAddress)(account.address);
|
|
106
|
+
tokenBalances[accountAddressLower] ?? (tokenBalances[accountAddressLower] = {});
|
|
107
|
+
(_a = tokenBalances[accountAddressLower])[chainIdHex] ?? (_a[chainIdHex] = {});
|
|
108
|
+
tokenBalances[accountAddressLower][chainIdHex][nativeAddress] =
|
|
109
|
+
balanceHex;
|
|
110
|
+
accountsByChainId[chainIdHex] ?? (accountsByChainId[chainIdHex] = {});
|
|
111
|
+
accountsByChainId[chainIdHex][checksumAddress] = {
|
|
112
|
+
balance: balanceHex,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
else if (parsed.assetNamespace === 'erc20') {
|
|
116
|
+
const tokenAddress = (0, util_1.toChecksumAddress)(String(parsed.assetReference));
|
|
117
|
+
tokenBalances[accountAddressLower] ?? (tokenBalances[accountAddressLower] = {});
|
|
118
|
+
(_b = tokenBalances[accountAddressLower])[chainIdHex] ?? (_b[chainIdHex] = {});
|
|
119
|
+
tokenBalances[accountAddressLower][chainIdHex][tokenAddress] =
|
|
120
|
+
balanceHex;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// Skip malformed asset IDs
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
for (const [assetId, metadata] of Object.entries(assetsInfo)) {
|
|
129
|
+
try {
|
|
130
|
+
const parsed = (0, utils_2.parseCaipAssetType)(assetId);
|
|
131
|
+
const chainIdParsed = (0, utils_2.parseCaipChainId)(parsed.chainId);
|
|
132
|
+
if (chainIdParsed.namespace !== 'eip155') {
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
const chainIdHex = (0, utils_1.numberToHex)(parseInt(chainIdParsed.reference, 10));
|
|
136
|
+
const address = metadata.type === 'native'
|
|
137
|
+
? (0, assets_controllers_1.getNativeTokenAddress)(chainIdHex)
|
|
138
|
+
: (0, util_1.toChecksumAddress)(String(parsed.assetReference));
|
|
139
|
+
const token = {
|
|
140
|
+
address,
|
|
141
|
+
decimals: metadata.decimals,
|
|
142
|
+
symbol: metadata.symbol,
|
|
143
|
+
name: metadata.name,
|
|
144
|
+
};
|
|
145
|
+
allTokensByChain[chainIdHex] ?? (allTokensByChain[chainIdHex] = []);
|
|
146
|
+
if (!allTokensByChain[chainIdHex].some((existing) => existing.address.toLowerCase() === address.toLowerCase())) {
|
|
147
|
+
allTokensByChain[chainIdHex].push(token);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
// Skip malformed asset IDs
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
const allTokens = {};
|
|
155
|
+
for (const [chainId, tokens] of Object.entries(allTokensByChain)) {
|
|
156
|
+
allTokens[chainId] = { '': tokens };
|
|
157
|
+
}
|
|
158
|
+
const exchangeRates = (0, formatExchangeRatesForBridge_js_1.formatExchangeRatesForBridge)({
|
|
159
|
+
assetsInfo,
|
|
160
|
+
assetsPrice,
|
|
161
|
+
selectedCurrency,
|
|
162
|
+
nativeAssetIdentifiers,
|
|
163
|
+
networkConfigurationsByChainId,
|
|
164
|
+
});
|
|
165
|
+
return {
|
|
166
|
+
tokenBalances,
|
|
167
|
+
accountsByChainId,
|
|
168
|
+
allTokens,
|
|
169
|
+
marketData: exchangeRates.marketData,
|
|
170
|
+
currencyRates: exchangeRates.currencyRates,
|
|
171
|
+
currentCurrency: exchangeRates.currentCurrency,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=formatStateForTransactionPay.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatStateForTransactionPay.cjs","sourceRoot":"","sources":["../../src/utils/formatStateForTransactionPay.ts"],"names":[],"mappings":"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","sourcesContent":["import { toChecksumAddress } from '@ethereumjs/util';\nimport { getNativeTokenAddress } from '@metamask/assets-controllers';\nimport { numberToHex } from '@metamask/utils';\nimport { parseCaipAssetType, parseCaipChainId } from '@metamask/utils';\nimport { isEqual } from 'lodash';\n\nimport type {\n AssetBalance,\n AssetMetadata,\n AssetPrice,\n Caip19AssetId,\n} from '../types.js';\nimport { formatExchangeRatesForBridge } from './formatExchangeRatesForBridge.js';\nimport type { BridgeExchangeRatesFormat } from './formatExchangeRatesForBridge.js';\n\n/** Account with id and address for mapping state to legacy format. */\nexport type AccountForLegacyFormat = { id: string; address: string };\n\n/**\n * Legacy Token shape expected by TokensController / transaction-pay-controller.\n */\nexport type LegacyToken = {\n address: string;\n decimals: number;\n symbol: string;\n name?: string;\n [key: string]: unknown;\n};\n\n/**\n * Legacy state shape that transaction-pay-controller reads from\n * TokenBalancesController, AccountTrackerController, TokensController,\n * TokenRatesController, and CurrencyRateController.\n */\nexport type TransactionPayLegacyFormat = {\n /** TokenBalancesController:getState().tokenBalances */\n tokenBalances: Record<string, Record<string, Record<string, `0x${string}`>>>;\n /** AccountTrackerController:getState().accountsByChainId */\n accountsByChainId: Record<\n string,\n Record<string, { balance: string; stakedBalance?: string }>\n >;\n /** TokensController:getState().allTokens (chainId -> key -> Token[]) */\n allTokens: Record<string, Record<string, LegacyToken[]>>;\n /** TokenRatesController:getState().marketData */\n marketData: BridgeExchangeRatesFormat['marketData'];\n /** CurrencyRateController:getState().currencyRates */\n currencyRates: BridgeExchangeRatesFormat['currencyRates'];\n /** CurrencyRateController:getState().currentCurrency */\n currentCurrency: string;\n};\n\n/** Parameters accepted by {@link formatStateForTransactionPay}. */\nexport type FormatStateForTransactionPayParams = {\n assetsBalance: Record<string, Record<string, AssetBalance>>;\n assetsInfo: Record<string, AssetMetadata>;\n assetsPrice: Record<string, AssetPrice>;\n selectedCurrency: string;\n accounts: AccountForLegacyFormat[];\n nativeAssetIdentifiers: Record<string, string>;\n networkConfigurationsByChainId?: Record<string, { nativeCurrency?: string }>;\n};\n\nfunction amountToHex(amount: string): `0x${string}` {\n const hexString = BigInt(amount).toString(16);\n return `0x${hexString}`;\n}\n\n/**\n * Determines whether two sets of {@link formatStateForTransactionPay}\n * parameters are identical for memoization purposes.\n *\n * State slices (`assetsBalance`, `assetsInfo`, `assetsPrice`,\n * `networkConfigurationsByChainId`) are compared by reference since\n * BaseController state updates are immutable. The `accounts` and\n * `nativeAssetIdentifiers` inputs are rebuilt on every call, so they are\n * compared by value instead.\n *\n * @param a - Previous parameters.\n * @param b - Next parameters.\n * @returns True if the parameters are identical.\n */\nfunction isTransactionPayParamsIdentical(\n a: FormatStateForTransactionPayParams,\n b: FormatStateForTransactionPayParams,\n): boolean {\n return (\n a.assetsBalance === b.assetsBalance &&\n a.assetsInfo === b.assetsInfo &&\n a.assetsPrice === b.assetsPrice &&\n a.selectedCurrency === b.selectedCurrency &&\n a.networkConfigurationsByChainId === b.networkConfigurationsByChainId &&\n isEqual(a.accounts, b.accounts) &&\n isEqual(a.nativeAssetIdentifiers, b.nativeAssetIdentifiers)\n );\n}\n\nfunction getAmountFromBalance(balance: AssetBalance): string {\n return typeof balance === 'object' && balance !== null && 'amount' in balance\n ? String((balance as { amount: string }).amount)\n : '0';\n}\n\nlet lastCall: {\n params: FormatStateForTransactionPayParams;\n result: TransactionPayLegacyFormat;\n} | null = null;\n\n/**\n * Converts AssetsController state into the legacy format consumed by\n * transaction-pay-controller (TokenBalancesController, AccountTrackerController,\n * TokensController, TokenRatesController, CurrencyRateController shapes).\n *\n * The last result is memoized on input identity: this function is invoked (via\n * `AssetsController:getStateForTransactionPay`) on every\n * `TransactionController:stateChange`, but its inputs only change when the\n * assets pipeline updates. Recomputing runs keccak256 (`toChecksumAddress`)\n * per asset per call, which dominates CPU profiles during transaction\n * approval.\n *\n * @param params - Conversion parameters.\n * @returns Legacy-compatible state for transaction-pay-controller.\n */\nexport function formatStateForTransactionPay(\n params: FormatStateForTransactionPayParams,\n): TransactionPayLegacyFormat {\n if (lastCall && isTransactionPayParamsIdentical(lastCall.params, params)) {\n return lastCall.result;\n }\n\n const result = computeStateForTransactionPay(params);\n lastCall = { params, result: Object.freeze(result) };\n return result;\n}\n\n/**\n * Clears the {@link formatStateForTransactionPay} memoize cache. Exported for tests.\n */\nexport function clearFormatStateForTransactionPayCacheForTesting(): void {\n lastCall = null;\n}\n\n/**\n * Performs the actual state conversion for\n * {@link formatStateForTransactionPay}.\n *\n * @param params - Conversion parameters.\n * @returns Legacy-compatible state for transaction-pay-controller.\n */\nfunction computeStateForTransactionPay(\n params: FormatStateForTransactionPayParams,\n): TransactionPayLegacyFormat {\n const {\n assetsBalance,\n assetsInfo,\n assetsPrice,\n selectedCurrency,\n accounts,\n nativeAssetIdentifiers,\n networkConfigurationsByChainId = {},\n } = params;\n\n const tokenBalances: TransactionPayLegacyFormat['tokenBalances'] = {};\n const accountsByChainId: TransactionPayLegacyFormat['accountsByChainId'] = {};\n const allTokensByChain: Record<string, LegacyToken[]> = {};\n\n for (const account of accounts) {\n const accountAddressLower = account.address.toLowerCase();\n const accountBalances = assetsBalance[account.id];\n if (!accountBalances) {\n continue;\n }\n\n for (const [assetId, balance] of Object.entries(accountBalances)) {\n try {\n const parsed = parseCaipAssetType(assetId as Caip19AssetId);\n const chainIdParsed = parseCaipChainId(parsed.chainId);\n if (chainIdParsed.namespace !== 'eip155') {\n continue;\n }\n const chainIdHex = numberToHex(parseInt(chainIdParsed.reference, 10));\n const amount = getAmountFromBalance(balance);\n const balanceHex = amountToHex(amount);\n\n if (assetsInfo[assetId]?.type === 'native') {\n const nativeAddress = toChecksumAddress(\n getNativeTokenAddress(chainIdHex),\n );\n const checksumAddress = toChecksumAddress(account.address);\n tokenBalances[accountAddressLower] ??= {};\n tokenBalances[accountAddressLower][chainIdHex] ??= {};\n tokenBalances[accountAddressLower][chainIdHex][nativeAddress] =\n balanceHex;\n accountsByChainId[chainIdHex] ??= {};\n accountsByChainId[chainIdHex][checksumAddress] = {\n balance: balanceHex,\n };\n } else if (parsed.assetNamespace === 'erc20') {\n const tokenAddress = toChecksumAddress(String(parsed.assetReference));\n tokenBalances[accountAddressLower] ??= {};\n tokenBalances[accountAddressLower][chainIdHex] ??= {};\n tokenBalances[accountAddressLower][chainIdHex][tokenAddress] =\n balanceHex;\n }\n } catch {\n // Skip malformed asset IDs\n }\n }\n }\n\n for (const [assetId, metadata] of Object.entries(assetsInfo)) {\n try {\n const parsed = parseCaipAssetType(assetId as Caip19AssetId);\n const chainIdParsed = parseCaipChainId(parsed.chainId);\n if (chainIdParsed.namespace !== 'eip155') {\n continue;\n }\n const chainIdHex = numberToHex(parseInt(chainIdParsed.reference, 10));\n const address =\n metadata.type === 'native'\n ? getNativeTokenAddress(chainIdHex)\n : toChecksumAddress(String(parsed.assetReference));\n const token: LegacyToken = {\n address,\n decimals: metadata.decimals,\n symbol: metadata.symbol,\n name: metadata.name,\n };\n allTokensByChain[chainIdHex] ??= [];\n if (\n !allTokensByChain[chainIdHex].some(\n (existing) =>\n existing.address.toLowerCase() === address.toLowerCase(),\n )\n ) {\n allTokensByChain[chainIdHex].push(token);\n }\n } catch {\n // Skip malformed asset IDs\n }\n }\n\n const allTokens: TransactionPayLegacyFormat['allTokens'] = {};\n for (const [chainId, tokens] of Object.entries(allTokensByChain)) {\n allTokens[chainId] = { '': tokens };\n }\n\n const exchangeRates = formatExchangeRatesForBridge({\n assetsInfo,\n assetsPrice,\n selectedCurrency,\n nativeAssetIdentifiers,\n networkConfigurationsByChainId,\n });\n\n return {\n tokenBalances,\n accountsByChainId,\n allTokens,\n marketData: exchangeRates.marketData,\n currencyRates: exchangeRates.currencyRates,\n currentCurrency: exchangeRates.currentCurrency,\n };\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { AssetBalance, AssetMetadata, AssetPrice } from
|
|
2
|
-
import type { BridgeExchangeRatesFormat } from
|
|
1
|
+
import type { AssetBalance, AssetMetadata, AssetPrice } from "../types.cjs";
|
|
2
|
+
import type { BridgeExchangeRatesFormat } from "./formatExchangeRatesForBridge.cjs";
|
|
3
3
|
/** Account with id and address for mapping state to legacy format. */
|
|
4
4
|
export type AccountForLegacyFormat = {
|
|
5
5
|
id: string;
|
|
@@ -69,4 +69,4 @@ export declare function formatStateForTransactionPay(params: FormatStateForTrans
|
|
|
69
69
|
* Clears the {@link formatStateForTransactionPay} memoize cache. Exported for tests.
|
|
70
70
|
*/
|
|
71
71
|
export declare function clearFormatStateForTransactionPayCacheForTesting(): void;
|
|
72
|
-
//# sourceMappingURL=formatStateForTransactionPay.d.
|
|
72
|
+
//# sourceMappingURL=formatStateForTransactionPay.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatStateForTransactionPay.d.cts","sourceRoot":"","sources":["../../src/utils/formatStateForTransactionPay.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,UAAU,EAEX,qBAAoB;AAErB,OAAO,KAAK,EAAE,yBAAyB,EAAE,2CAA0C;AAEnF,sEAAsE;AACtE,MAAM,MAAM,sBAAsB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAErE;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC,uDAAuD;IACvD,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7E,4DAA4D;IAC5D,iBAAiB,EAAE,MAAM,CACvB,MAAM,EACN,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAC5D,CAAC;IACF,wEAAwE;IACxE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IACzD,iDAAiD;IACjD,UAAU,EAAE,yBAAyB,CAAC,YAAY,CAAC,CAAC;IACpD,sDAAsD;IACtD,aAAa,EAAE,yBAAyB,CAAC,eAAe,CAAC,CAAC;IAC1D,wDAAwD;IACxD,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,mEAAmE;AACnE,MAAM,MAAM,kCAAkC,GAAG;IAC/C,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAC5D,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,sBAAsB,EAAE,CAAC;IACnC,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,8BAA8B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9E,CAAC;AA+CF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,kCAAkC,GACzC,0BAA0B,CAQ5B;AAED;;GAEG;AACH,wBAAgB,gDAAgD,IAAI,IAAI,CAEvE"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { AssetBalance, AssetMetadata, AssetPrice } from "../types.mjs";
|
|
2
|
+
import type { BridgeExchangeRatesFormat } from "./formatExchangeRatesForBridge.mjs";
|
|
3
|
+
/** Account with id and address for mapping state to legacy format. */
|
|
4
|
+
export type AccountForLegacyFormat = {
|
|
5
|
+
id: string;
|
|
6
|
+
address: string;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Legacy Token shape expected by TokensController / transaction-pay-controller.
|
|
10
|
+
*/
|
|
11
|
+
export type LegacyToken = {
|
|
12
|
+
address: string;
|
|
13
|
+
decimals: number;
|
|
14
|
+
symbol: string;
|
|
15
|
+
name?: string;
|
|
16
|
+
[key: string]: unknown;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Legacy state shape that transaction-pay-controller reads from
|
|
20
|
+
* TokenBalancesController, AccountTrackerController, TokensController,
|
|
21
|
+
* TokenRatesController, and CurrencyRateController.
|
|
22
|
+
*/
|
|
23
|
+
export type TransactionPayLegacyFormat = {
|
|
24
|
+
/** TokenBalancesController:getState().tokenBalances */
|
|
25
|
+
tokenBalances: Record<string, Record<string, Record<string, `0x${string}`>>>;
|
|
26
|
+
/** AccountTrackerController:getState().accountsByChainId */
|
|
27
|
+
accountsByChainId: Record<string, Record<string, {
|
|
28
|
+
balance: string;
|
|
29
|
+
stakedBalance?: string;
|
|
30
|
+
}>>;
|
|
31
|
+
/** TokensController:getState().allTokens (chainId -> key -> Token[]) */
|
|
32
|
+
allTokens: Record<string, Record<string, LegacyToken[]>>;
|
|
33
|
+
/** TokenRatesController:getState().marketData */
|
|
34
|
+
marketData: BridgeExchangeRatesFormat['marketData'];
|
|
35
|
+
/** CurrencyRateController:getState().currencyRates */
|
|
36
|
+
currencyRates: BridgeExchangeRatesFormat['currencyRates'];
|
|
37
|
+
/** CurrencyRateController:getState().currentCurrency */
|
|
38
|
+
currentCurrency: string;
|
|
39
|
+
};
|
|
40
|
+
/** Parameters accepted by {@link formatStateForTransactionPay}. */
|
|
41
|
+
export type FormatStateForTransactionPayParams = {
|
|
42
|
+
assetsBalance: Record<string, Record<string, AssetBalance>>;
|
|
43
|
+
assetsInfo: Record<string, AssetMetadata>;
|
|
44
|
+
assetsPrice: Record<string, AssetPrice>;
|
|
45
|
+
selectedCurrency: string;
|
|
46
|
+
accounts: AccountForLegacyFormat[];
|
|
47
|
+
nativeAssetIdentifiers: Record<string, string>;
|
|
48
|
+
networkConfigurationsByChainId?: Record<string, {
|
|
49
|
+
nativeCurrency?: string;
|
|
50
|
+
}>;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Converts AssetsController state into the legacy format consumed by
|
|
54
|
+
* transaction-pay-controller (TokenBalancesController, AccountTrackerController,
|
|
55
|
+
* TokensController, TokenRatesController, CurrencyRateController shapes).
|
|
56
|
+
*
|
|
57
|
+
* The last result is memoized on input identity: this function is invoked (via
|
|
58
|
+
* `AssetsController:getStateForTransactionPay`) on every
|
|
59
|
+
* `TransactionController:stateChange`, but its inputs only change when the
|
|
60
|
+
* assets pipeline updates. Recomputing runs keccak256 (`toChecksumAddress`)
|
|
61
|
+
* per asset per call, which dominates CPU profiles during transaction
|
|
62
|
+
* approval.
|
|
63
|
+
*
|
|
64
|
+
* @param params - Conversion parameters.
|
|
65
|
+
* @returns Legacy-compatible state for transaction-pay-controller.
|
|
66
|
+
*/
|
|
67
|
+
export declare function formatStateForTransactionPay(params: FormatStateForTransactionPayParams): TransactionPayLegacyFormat;
|
|
68
|
+
/**
|
|
69
|
+
* Clears the {@link formatStateForTransactionPay} memoize cache. Exported for tests.
|
|
70
|
+
*/
|
|
71
|
+
export declare function clearFormatStateForTransactionPayCacheForTesting(): void;
|
|
72
|
+
//# sourceMappingURL=formatStateForTransactionPay.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatStateForTransactionPay.d.mts","sourceRoot":"","sources":["../../src/utils/formatStateForTransactionPay.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,UAAU,EAEX,qBAAoB;AAErB,OAAO,KAAK,EAAE,yBAAyB,EAAE,2CAA0C;AAEnF,sEAAsE;AACtE,MAAM,MAAM,sBAAsB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAErE;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC,uDAAuD;IACvD,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7E,4DAA4D;IAC5D,iBAAiB,EAAE,MAAM,CACvB,MAAM,EACN,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAC5D,CAAC;IACF,wEAAwE;IACxE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IACzD,iDAAiD;IACjD,UAAU,EAAE,yBAAyB,CAAC,YAAY,CAAC,CAAC;IACpD,sDAAsD;IACtD,aAAa,EAAE,yBAAyB,CAAC,eAAe,CAAC,CAAC;IAC1D,wDAAwD;IACxD,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,mEAAmE;AACnE,MAAM,MAAM,kCAAkC,GAAG;IAC/C,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAC5D,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,sBAAsB,EAAE,CAAC;IACnC,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,8BAA8B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9E,CAAC;AA+CF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,kCAAkC,GACzC,0BAA0B,CAQ5B;AAED;;GAEG;AACH,wBAAgB,gDAAgD,IAAI,IAAI,CAEvE"}
|