@metamask-previews/bridge-controller 19.0.0-preview-28cd3de3 → 19.0.0-preview-60adb80

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/CHANGELOG.md +1 -0
  2. package/dist/bridge-controller.cjs +13 -25
  3. package/dist/bridge-controller.cjs.map +1 -1
  4. package/dist/bridge-controller.d.cts +4 -1
  5. package/dist/bridge-controller.d.cts.map +1 -1
  6. package/dist/bridge-controller.d.mts +4 -1
  7. package/dist/bridge-controller.d.mts.map +1 -1
  8. package/dist/bridge-controller.mjs +15 -27
  9. package/dist/bridge-controller.mjs.map +1 -1
  10. package/dist/constants/bridge.cjs +0 -5
  11. package/dist/constants/bridge.cjs.map +1 -1
  12. package/dist/constants/bridge.d.cts.map +1 -1
  13. package/dist/constants/bridge.d.mts.map +1 -1
  14. package/dist/constants/bridge.mjs +0 -5
  15. package/dist/constants/bridge.mjs.map +1 -1
  16. package/dist/index.cjs +3 -4
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.cts +3 -3
  19. package/dist/index.d.cts.map +1 -1
  20. package/dist/index.d.mts +3 -3
  21. package/dist/index.d.mts.map +1 -1
  22. package/dist/index.mjs +2 -2
  23. package/dist/index.mjs.map +1 -1
  24. package/dist/selectors.cjs +32 -12
  25. package/dist/selectors.cjs.map +1 -1
  26. package/dist/selectors.d.cts +186 -49
  27. package/dist/selectors.d.cts.map +1 -1
  28. package/dist/selectors.d.mts +186 -49
  29. package/dist/selectors.d.mts.map +1 -1
  30. package/dist/selectors.mjs +31 -11
  31. package/dist/selectors.mjs.map +1 -1
  32. package/dist/types.cjs +2 -12
  33. package/dist/types.cjs.map +1 -1
  34. package/dist/types.d.cts +6 -21
  35. package/dist/types.d.cts.map +1 -1
  36. package/dist/types.d.mts +6 -21
  37. package/dist/types.d.mts.map +1 -1
  38. package/dist/types.mjs +1 -11
  39. package/dist/types.mjs.map +1 -1
  40. package/dist/utils/feature-flags.cjs +38 -0
  41. package/dist/utils/feature-flags.cjs.map +1 -0
  42. package/dist/utils/feature-flags.d.cts +16 -0
  43. package/dist/utils/feature-flags.d.cts.map +1 -0
  44. package/dist/utils/feature-flags.d.mts +16 -0
  45. package/dist/utils/feature-flags.d.mts.map +1 -0
  46. package/dist/utils/feature-flags.mjs +32 -0
  47. package/dist/utils/feature-flags.mjs.map +1 -0
  48. package/dist/utils/fetch.cjs +1 -40
  49. package/dist/utils/fetch.cjs.map +1 -1
  50. package/dist/utils/fetch.d.cts +1 -10
  51. package/dist/utils/fetch.d.cts.map +1 -1
  52. package/dist/utils/fetch.d.mts +1 -10
  53. package/dist/utils/fetch.d.mts.map +1 -1
  54. package/dist/utils/fetch.mjs +2 -40
  55. package/dist/utils/fetch.mjs.map +1 -1
  56. package/dist/utils/validators.cjs +2 -6
  57. package/dist/utils/validators.cjs.map +1 -1
  58. package/dist/utils/validators.d.cts +2 -2
  59. package/dist/utils/validators.d.cts.map +1 -1
  60. package/dist/utils/validators.d.mts +2 -2
  61. package/dist/utils/validators.d.mts.map +1 -1
  62. package/dist/utils/validators.mjs +3 -7
  63. package/dist/utils/validators.mjs.map +1 -1
  64. package/package.json +5 -3
@@ -1 +1 @@
1
- {"version":3,"file":"selectors.cjs","sourceRoot":"","sources":["../src/selectors.ts"],"names":[],"mappings":"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","sourcesContent":["import { AddressZero } from '@ethersproject/constants';\nimport type {\n CurrencyRateState,\n MultichainAssetsRatesControllerState,\n TokenRatesControllerState,\n} from '@metamask/assets-controllers';\nimport type { GasFeeEstimates } from '@metamask/gas-fee-controller';\nimport type { CaipAssetType } from '@metamask/utils';\nimport { isStrictHexString } from '@metamask/utils';\nimport { orderBy } from 'lodash';\nimport {\n createSelector as createSelector_,\n createStructuredSelector as createStructuredSelector_,\n} from 'reselect';\n\nimport { BRIDGE_PREFERRED_GAS_ESTIMATE } from './constants/bridge';\nimport type {\n BridgeControllerState,\n BridgeFeatureFlagsKey,\n ExchangeRate,\n GenericQuoteRequest,\n QuoteMetadata,\n QuoteResponse,\n} from './types';\nimport { RequestStatus, SortOrder } from './types';\nimport {\n getNativeAssetForChainId,\n isNativeAddress,\n isSolanaChainId,\n} from './utils/bridge';\nimport {\n formatAddressToAssetId,\n formatChainIdToCaip,\n formatChainIdToHex,\n} from './utils/caip-formatters';\nimport {\n calcAdjustedReturn,\n calcCost,\n calcEstimatedAndMaxTotalGasFee,\n calcRelayerFee,\n calcSentAmount,\n calcSolanaTotalNetworkFee,\n calcSwapRate,\n calcToAmount,\n calcTotalEstimatedNetworkFee,\n calcTotalMaxNetworkFee,\n} from './utils/quote';\n\n/**\n * The controller states that provide exchange rates\n */\ntype ExchangeRateControllerState = MultichainAssetsRatesControllerState &\n TokenRatesControllerState &\n CurrencyRateState &\n Pick<BridgeControllerState, 'assetExchangeRates'>;\n/**\n * The state of the bridge controller and all its dependency controllers\n */\nexport type BridgeAppState = BridgeControllerState & {\n gasFeeEstimates: GasFeeEstimates;\n} & ExchangeRateControllerState & {\n participateInMetaMetrics: boolean;\n };\n/**\n * Creates a structured selector for the bridge controller\n */\nconst createStructuredBridgeSelector =\n createStructuredSelector_.withTypes<BridgeAppState>();\n/**\n * Creates a typed selector for the bridge controller\n */\nconst createBridgeSelector = createSelector_.withTypes<BridgeAppState>();\n/**\n * Required parameters that clients must provide for the bridge quotes selector\n */\ntype BridgeQuotesClientParams = {\n sortOrder: SortOrder;\n selectedQuote: (QuoteResponse & QuoteMetadata) | null;\n featureFlagsKey: BridgeFeatureFlagsKey;\n};\n\nconst getExchangeRateByChainIdAndAddress = (\n exchangeRateSources: ExchangeRateControllerState,\n chainId?: GenericQuoteRequest['srcChainId'],\n address?: GenericQuoteRequest['srcTokenAddress'],\n): ExchangeRate => {\n if (!chainId || !address) {\n return {};\n }\n // TODO return usd exchange rate if user has opted into metrics\n const assetId = formatAddressToAssetId(address, chainId);\n if (!assetId) {\n return {};\n }\n\n const { assetExchangeRates, currencyRates, marketData, conversionRates } =\n exchangeRateSources;\n\n // If the asset exchange rate is available in the bridge controller, use it\n // This is defined if the token's rate is not available from the assets controllers\n const bridgeControllerRate =\n assetExchangeRates?.[assetId] ??\n assetExchangeRates?.[assetId.toLowerCase() as CaipAssetType];\n if (bridgeControllerRate?.exchangeRate) {\n return bridgeControllerRate;\n }\n // If the chain is a Solana chain, use the conversion rate from the multichain assets controller\n if (isSolanaChainId(chainId)) {\n const multichainAssetExchangeRate = conversionRates?.[assetId];\n if (multichainAssetExchangeRate) {\n return {\n exchangeRate: multichainAssetExchangeRate.rate,\n usdExchangeRate: undefined,\n };\n }\n return {};\n }\n // If the chain is an EVM chain, use the conversion rate from the currency rates controller\n if (isNativeAddress(address)) {\n const { symbol } = getNativeAssetForChainId(chainId);\n const evmNativeExchangeRate = currencyRates?.[symbol];\n if (evmNativeExchangeRate) {\n return {\n exchangeRate: evmNativeExchangeRate?.conversionRate?.toString(),\n usdExchangeRate: evmNativeExchangeRate?.usdConversionRate?.toString(),\n };\n }\n return {};\n }\n // If the chain is an EVM chain and the asset is not the native asset, use the conversion rate from the token rates controller\n const evmTokenExchangeRates = marketData?.[formatChainIdToHex(chainId)];\n const evmTokenExchangeRateForAddress = isStrictHexString(address)\n ? evmTokenExchangeRates?.[address]\n : null;\n if (evmTokenExchangeRateForAddress) {\n return {\n exchangeRate: evmTokenExchangeRateForAddress?.price.toString(),\n usdExchangeRate: undefined,\n };\n }\n\n return {};\n};\n\n/**\n * Selects the asset exchange rate for a given chain and address\n *\n * @param state The state of the bridge controller and its dependency controllers\n * @param chainId The chain ID of the asset\n * @param address The address of the asset\n * @returns The asset exchange rate for the given chain and address\n */\nexport const selectExchangeRateByChainIdAndAddress = (\n state: BridgeAppState,\n chainId?: GenericQuoteRequest['srcChainId'],\n address?: GenericQuoteRequest['srcTokenAddress'],\n) => {\n return getExchangeRateByChainIdAndAddress(state, chainId, address);\n};\n\n/**\n * Checks whether an exchange rate is available for a given chain and address\n *\n * @param params The parameters to pass to {@link getExchangeRateByChainIdAndAddress}\n * @returns Whether an exchange rate is available for the given chain and address\n */\nexport const selectIsAssetExchangeRateInState = (\n ...params: Parameters<typeof getExchangeRateByChainIdAndAddress>\n) =>\n Boolean(getExchangeRateByChainIdAndAddress(...params)?.exchangeRate) &&\n Boolean(getExchangeRateByChainIdAndAddress(...params)?.usdExchangeRate);\n\n/**\n * Selects the gas fee estimates from the gas fee controller. All potential networks\n * support EIP1559 gas fees so assume that gasFeeEstimates is of type GasFeeEstimates\n *\n * @returns The gas fee estimates in decGWEI\n */\nconst selectBridgeFeesPerGas = createStructuredBridgeSelector({\n estimatedBaseFeeInDecGwei: ({ gasFeeEstimates }) =>\n gasFeeEstimates?.estimatedBaseFee,\n maxPriorityFeePerGasInDecGwei: ({ gasFeeEstimates }) =>\n gasFeeEstimates?.[BRIDGE_PREFERRED_GAS_ESTIMATE]\n ?.suggestedMaxPriorityFeePerGas,\n maxFeePerGasInDecGwei: ({ gasFeeEstimates }) =>\n gasFeeEstimates?.high?.suggestedMaxFeePerGas,\n});\n\n// Selects cross-chain swap quotes including their metadata\nconst selectBridgeQuotesWithMetadata = createBridgeSelector(\n [\n ({ quotes }) => quotes,\n selectBridgeFeesPerGas,\n createBridgeSelector(\n [\n (state) => state,\n ({ quoteRequest: { srcChainId } }) => srcChainId,\n ({ quoteRequest: { srcTokenAddress } }) => srcTokenAddress,\n ],\n selectExchangeRateByChainIdAndAddress,\n ),\n createBridgeSelector(\n [\n (state) => state,\n ({ quoteRequest: { destChainId } }) => destChainId,\n ({ quoteRequest: { destTokenAddress } }) => destTokenAddress,\n ],\n selectExchangeRateByChainIdAndAddress,\n ),\n createBridgeSelector(\n [(state) => state, ({ quoteRequest: { srcChainId } }) => srcChainId],\n (state, chainId) =>\n selectExchangeRateByChainIdAndAddress(state, chainId, AddressZero),\n ),\n ],\n (\n quotes,\n bridgeFeesPerGas,\n srcTokenExchangeRate,\n destTokenExchangeRate,\n nativeExchangeRate,\n ) => {\n const newQuotes = quotes.map((quote) => {\n const sentAmount = calcSentAmount(quote.quote, srcTokenExchangeRate);\n const toTokenAmount = calcToAmount(quote.quote, destTokenExchangeRate);\n\n let totalEstimatedNetworkFee, gasFee, totalMaxNetworkFee, relayerFee;\n\n if (isSolanaChainId(quote.quote.srcChainId)) {\n totalEstimatedNetworkFee = calcSolanaTotalNetworkFee(\n quote,\n nativeExchangeRate,\n );\n gasFee = totalEstimatedNetworkFee;\n totalMaxNetworkFee = totalEstimatedNetworkFee;\n } else {\n relayerFee = calcRelayerFee(quote, nativeExchangeRate);\n gasFee = calcEstimatedAndMaxTotalGasFee({\n bridgeQuote: quote,\n ...bridgeFeesPerGas,\n ...nativeExchangeRate,\n });\n totalEstimatedNetworkFee = calcTotalEstimatedNetworkFee(\n gasFee,\n relayerFee,\n );\n totalMaxNetworkFee = calcTotalMaxNetworkFee(gasFee, relayerFee);\n }\n\n const adjustedReturn = calcAdjustedReturn(\n toTokenAmount,\n totalEstimatedNetworkFee,\n );\n const cost = calcCost(adjustedReturn, sentAmount);\n\n return {\n ...quote,\n // QuoteMetadata fields\n sentAmount,\n toTokenAmount,\n swapRate: calcSwapRate(sentAmount.amount, toTokenAmount.amount),\n totalNetworkFee: totalEstimatedNetworkFee,\n totalMaxNetworkFee,\n gasFee,\n adjustedReturn,\n cost,\n };\n });\n\n return newQuotes;\n },\n);\n\nconst selectSortedBridgeQuotes = createBridgeSelector(\n [\n selectBridgeQuotesWithMetadata,\n (_, { sortOrder }: BridgeQuotesClientParams) => sortOrder,\n ],\n (quotesWithMetadata, sortOrder): (QuoteResponse & QuoteMetadata)[] => {\n switch (sortOrder) {\n case SortOrder.ETA_ASC:\n return orderBy(\n quotesWithMetadata,\n (quote) => quote.estimatedProcessingTimeInSeconds,\n 'asc',\n );\n default:\n return orderBy(\n quotesWithMetadata,\n ({ cost }) =>\n cost.valueInCurrency ? Number(cost.valueInCurrency) : 0,\n 'asc',\n );\n }\n },\n);\n\nconst selectRecommendedQuote = createBridgeSelector(\n [selectSortedBridgeQuotes],\n (quotes) => (quotes.length > 0 ? quotes[0] : null),\n);\n\nconst selectActiveQuote = createBridgeSelector(\n [\n selectRecommendedQuote,\n (_, { selectedQuote }: BridgeQuotesClientParams) => selectedQuote,\n ],\n (recommendedQuote, selectedQuote) => selectedQuote ?? recommendedQuote,\n);\n\nconst selectIsQuoteGoingToRefresh = (\n state: BridgeAppState,\n { featureFlagsKey }: BridgeQuotesClientParams,\n) =>\n state.quoteRequest.insufficientBal\n ? false\n : state.quotesRefreshCount <\n state.bridgeFeatureFlags[featureFlagsKey].maxRefreshCount;\n\nconst selectQuoteRefreshRate = createBridgeSelector(\n [\n ({ bridgeFeatureFlags }, { featureFlagsKey }: BridgeQuotesClientParams) =>\n bridgeFeatureFlags[featureFlagsKey],\n (state) => state.quoteRequest.srcChainId,\n ],\n (featureFlags, srcChainId) =>\n (srcChainId\n ? featureFlags.chains[formatChainIdToCaip(srcChainId)]?.refreshRate\n : featureFlags.refreshRate) ?? featureFlags.refreshRate,\n);\n\nexport const selectIsQuoteExpired = createBridgeSelector(\n [\n selectIsQuoteGoingToRefresh,\n ({ quotesLastFetched }) => quotesLastFetched,\n selectQuoteRefreshRate,\n (_, __, currentTimeInMs: number) => currentTimeInMs,\n ],\n (isQuoteGoingToRefresh, quotesLastFetched, refreshRate, currentTimeInMs) =>\n Boolean(\n !isQuoteGoingToRefresh &&\n quotesLastFetched &&\n currentTimeInMs - quotesLastFetched > refreshRate,\n ),\n);\n\n/**\n * Selects sorted cross-chain swap quotes. By default, the quotes are sorted by cost in ascending order.\n *\n * @param state - The state of the bridge controller and its dependency controllers\n * @param sortOrder - The sort order of the quotes\n * @param selectedQuote - The quote that is currently selected by the user, should be cleared by clients when the req params change\n * @param featureFlagsKey - The feature flags key for the client (e.g. `BridgeFeatureFlagsKey.EXTENSION_CONFIG`\n * @returns The activeQuote, recommendedQuote, sortedQuotes, and other quote fetching metadata\n *\n * @example\n * ```ts\n * const quotes = useSelector(state => selectBridgeQuotes(\n * state.metamask,\n * {\n * sortOrder: state.bridge.sortOrder,\n * selectedQuote: state.bridge.selectedQuote,\n * featureFlagsKey: BridgeFeatureFlagsKey.EXTENSION_CONFIG,\n * }\n * ));\n * ```\n */\nexport const selectBridgeQuotes = createStructuredBridgeSelector({\n sortedQuotes: selectSortedBridgeQuotes,\n recommendedQuote: selectRecommendedQuote,\n activeQuote: selectActiveQuote,\n quotesLastFetchedMs: (state) => state.quotesLastFetched,\n isLoading: (state) => state.quotesLoadingStatus === RequestStatus.LOADING,\n quoteFetchError: (state) => state.quoteFetchError,\n quotesRefreshCount: (state) => state.quotesRefreshCount,\n quotesInitialLoadTimeMs: (state) => state.quotesInitialLoadTime,\n isQuoteGoingToRefresh: selectIsQuoteGoingToRefresh,\n});\n"]}
1
+ {"version":3,"file":"selectors.cjs","sourceRoot":"","sources":["../src/selectors.ts"],"names":[],"mappings":"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","sourcesContent":["import { AddressZero } from '@ethersproject/constants';\nimport type {\n CurrencyRateState,\n MultichainAssetsRatesControllerState,\n TokenRatesControllerState,\n} from '@metamask/assets-controllers';\nimport type { GasFeeEstimates } from '@metamask/gas-fee-controller';\nimport type { CaipAssetType, Json } from '@metamask/utils';\nimport { isStrictHexString } from '@metamask/utils';\nimport { orderBy } from 'lodash';\nimport {\n createSelector as createSelector_,\n createStructuredSelector as createStructuredSelector_,\n} from 'reselect';\n\nimport { BRIDGE_PREFERRED_GAS_ESTIMATE } from './constants/bridge';\nimport type {\n BridgeControllerState,\n ExchangeRate,\n GenericQuoteRequest,\n QuoteMetadata,\n QuoteResponse,\n} from './types';\nimport { RequestStatus, SortOrder } from './types';\nimport {\n getNativeAssetForChainId,\n isNativeAddress,\n isSolanaChainId,\n} from './utils/bridge';\nimport {\n formatAddressToAssetId,\n formatChainIdToCaip,\n formatChainIdToHex,\n} from './utils/caip-formatters';\nimport { processFeatureFlags } from './utils/feature-flags';\nimport {\n calcAdjustedReturn,\n calcCost,\n calcEstimatedAndMaxTotalGasFee,\n calcRelayerFee,\n calcSentAmount,\n calcSolanaTotalNetworkFee,\n calcSwapRate,\n calcToAmount,\n calcTotalEstimatedNetworkFee,\n calcTotalMaxNetworkFee,\n} from './utils/quote';\n\n/**\n * The controller states that provide exchange rates\n */\ntype ExchangeRateControllerState = MultichainAssetsRatesControllerState &\n TokenRatesControllerState &\n CurrencyRateState &\n Pick<BridgeControllerState, 'assetExchangeRates'>;\n/**\n * The state of the bridge controller and all its dependency controllers\n */\ntype RemoteFeatureFlagControllerState = {\n remoteFeatureFlags: {\n bridgeConfig: unknown;\n };\n};\nexport type BridgeAppState = BridgeControllerState & {\n gasFeeEstimates: GasFeeEstimates;\n} & ExchangeRateControllerState & {\n participateInMetaMetrics: boolean;\n } & RemoteFeatureFlagControllerState;\n/**\n * Creates a structured selector for the bridge controller\n */\nconst createStructuredBridgeSelector =\n createStructuredSelector_.withTypes<BridgeAppState>();\n/**\n * Creates a typed selector for the bridge controller\n */\nconst createBridgeSelector = createSelector_.withTypes<BridgeAppState>();\n/**\n * Required parameters that clients must provide for the bridge quotes selector\n */\ntype BridgeQuotesClientParams = {\n sortOrder: SortOrder;\n selectedQuote: (QuoteResponse & QuoteMetadata) | null;\n};\n\nconst createFeatureFlagsSelector =\n createSelector_.withTypes<RemoteFeatureFlagControllerState>();\n\n/**\n * Selects the bridge feature flags\n *\n * @param state - The state of the bridge controller\n * @returns The bridge feature flags\n *\n * @example\n * ```ts\n * const featureFlags = useSelector(state => selectBridgeFeatureFlags(state));\n *\n * Or\n *\n * export const selectBridgeFeatureFlags = createSelector(\n * selectRemoteFeatureFlags,\n * (remoteFeatureFlags) =>\n * selectBridgeFeatureFlagsBase({\n * bridgeConfig: remoteFeatureFlags.bridgeConfig,\n * }),\n * );\n * ```\n */\nexport const selectBridgeFeatureFlags = createFeatureFlagsSelector(\n [(state) => state.remoteFeatureFlags.bridgeConfig],\n (bridgeConfig: unknown) => processFeatureFlags(bridgeConfig),\n);\n\nconst getExchangeRateByChainIdAndAddress = (\n exchangeRateSources: ExchangeRateControllerState,\n chainId?: GenericQuoteRequest['srcChainId'],\n address?: GenericQuoteRequest['srcTokenAddress'],\n): ExchangeRate => {\n if (!chainId || !address) {\n return {};\n }\n // TODO return usd exchange rate if user has opted into metrics\n const assetId = formatAddressToAssetId(address, chainId);\n if (!assetId) {\n return {};\n }\n\n const { assetExchangeRates, currencyRates, marketData, conversionRates } =\n exchangeRateSources;\n\n // If the asset exchange rate is available in the bridge controller, use it\n // This is defined if the token's rate is not available from the assets controllers\n const bridgeControllerRate =\n assetExchangeRates?.[assetId] ??\n assetExchangeRates?.[assetId.toLowerCase() as CaipAssetType];\n if (bridgeControllerRate?.exchangeRate) {\n return bridgeControllerRate;\n }\n // If the chain is a Solana chain, use the conversion rate from the multichain assets controller\n if (isSolanaChainId(chainId)) {\n const multichainAssetExchangeRate = conversionRates?.[assetId];\n if (multichainAssetExchangeRate) {\n return {\n exchangeRate: multichainAssetExchangeRate.rate,\n usdExchangeRate: undefined,\n };\n }\n return {};\n }\n // If the chain is an EVM chain, use the conversion rate from the currency rates controller\n if (isNativeAddress(address)) {\n const { symbol } = getNativeAssetForChainId(chainId);\n const evmNativeExchangeRate = currencyRates?.[symbol];\n if (evmNativeExchangeRate) {\n return {\n exchangeRate: evmNativeExchangeRate?.conversionRate?.toString(),\n usdExchangeRate: evmNativeExchangeRate?.usdConversionRate?.toString(),\n };\n }\n return {};\n }\n // If the chain is an EVM chain and the asset is not the native asset, use the conversion rate from the token rates controller\n const evmTokenExchangeRates = marketData?.[formatChainIdToHex(chainId)];\n const evmTokenExchangeRateForAddress = isStrictHexString(address)\n ? evmTokenExchangeRates?.[address]\n : null;\n if (evmTokenExchangeRateForAddress) {\n return {\n exchangeRate: evmTokenExchangeRateForAddress?.price.toString(),\n usdExchangeRate: undefined,\n };\n }\n\n return {};\n};\n\n/**\n * Selects the asset exchange rate for a given chain and address\n *\n * @param state The state of the bridge controller and its dependency controllers\n * @param chainId The chain ID of the asset\n * @param address The address of the asset\n * @returns The asset exchange rate for the given chain and address\n */\nexport const selectExchangeRateByChainIdAndAddress = (\n state: BridgeAppState,\n chainId?: GenericQuoteRequest['srcChainId'],\n address?: GenericQuoteRequest['srcTokenAddress'],\n) => {\n return getExchangeRateByChainIdAndAddress(state, chainId, address);\n};\n\n/**\n * Checks whether an exchange rate is available for a given chain and address\n *\n * @param params The parameters to pass to {@link getExchangeRateByChainIdAndAddress}\n * @returns Whether an exchange rate is available for the given chain and address\n */\nexport const selectIsAssetExchangeRateInState = (\n ...params: Parameters<typeof getExchangeRateByChainIdAndAddress>\n) =>\n Boolean(getExchangeRateByChainIdAndAddress(...params)?.exchangeRate) &&\n Boolean(getExchangeRateByChainIdAndAddress(...params)?.usdExchangeRate);\n\n/**\n * Selects the gas fee estimates from the gas fee controller. All potential networks\n * support EIP1559 gas fees so assume that gasFeeEstimates is of type GasFeeEstimates\n *\n * @returns The gas fee estimates in decGWEI\n */\nconst selectBridgeFeesPerGas = createStructuredBridgeSelector({\n estimatedBaseFeeInDecGwei: ({ gasFeeEstimates }) =>\n gasFeeEstimates?.estimatedBaseFee,\n maxPriorityFeePerGasInDecGwei: ({ gasFeeEstimates }) =>\n gasFeeEstimates?.[BRIDGE_PREFERRED_GAS_ESTIMATE]\n ?.suggestedMaxPriorityFeePerGas,\n maxFeePerGasInDecGwei: ({ gasFeeEstimates }) =>\n gasFeeEstimates?.high?.suggestedMaxFeePerGas,\n});\n\n// Selects cross-chain swap quotes including their metadata\nconst selectBridgeQuotesWithMetadata = createBridgeSelector(\n [\n ({ quotes }) => quotes,\n selectBridgeFeesPerGas,\n createBridgeSelector(\n [\n (state) => state,\n ({ quoteRequest: { srcChainId } }) => srcChainId,\n ({ quoteRequest: { srcTokenAddress } }) => srcTokenAddress,\n ],\n selectExchangeRateByChainIdAndAddress,\n ),\n createBridgeSelector(\n [\n (state) => state,\n ({ quoteRequest: { destChainId } }) => destChainId,\n ({ quoteRequest: { destTokenAddress } }) => destTokenAddress,\n ],\n selectExchangeRateByChainIdAndAddress,\n ),\n createBridgeSelector(\n [(state) => state, ({ quoteRequest: { srcChainId } }) => srcChainId],\n (state, chainId) =>\n selectExchangeRateByChainIdAndAddress(state, chainId, AddressZero),\n ),\n ],\n (\n quotes,\n bridgeFeesPerGas,\n srcTokenExchangeRate,\n destTokenExchangeRate,\n nativeExchangeRate,\n ) => {\n const newQuotes = quotes.map((quote) => {\n const sentAmount = calcSentAmount(quote.quote, srcTokenExchangeRate);\n const toTokenAmount = calcToAmount(quote.quote, destTokenExchangeRate);\n\n let totalEstimatedNetworkFee, gasFee, totalMaxNetworkFee, relayerFee;\n\n if (isSolanaChainId(quote.quote.srcChainId)) {\n totalEstimatedNetworkFee = calcSolanaTotalNetworkFee(\n quote,\n nativeExchangeRate,\n );\n gasFee = totalEstimatedNetworkFee;\n totalMaxNetworkFee = totalEstimatedNetworkFee;\n } else {\n relayerFee = calcRelayerFee(quote, nativeExchangeRate);\n gasFee = calcEstimatedAndMaxTotalGasFee({\n bridgeQuote: quote,\n ...bridgeFeesPerGas,\n ...nativeExchangeRate,\n });\n totalEstimatedNetworkFee = calcTotalEstimatedNetworkFee(\n gasFee,\n relayerFee,\n );\n totalMaxNetworkFee = calcTotalMaxNetworkFee(gasFee, relayerFee);\n }\n\n const adjustedReturn = calcAdjustedReturn(\n toTokenAmount,\n totalEstimatedNetworkFee,\n );\n const cost = calcCost(adjustedReturn, sentAmount);\n\n return {\n ...quote,\n // QuoteMetadata fields\n sentAmount,\n toTokenAmount,\n swapRate: calcSwapRate(sentAmount.amount, toTokenAmount.amount),\n totalNetworkFee: totalEstimatedNetworkFee,\n totalMaxNetworkFee,\n gasFee,\n adjustedReturn,\n cost,\n };\n });\n\n return newQuotes;\n },\n);\n\nconst selectSortedBridgeQuotes = createBridgeSelector(\n [\n selectBridgeQuotesWithMetadata,\n (_, { sortOrder }: BridgeQuotesClientParams) => sortOrder,\n ],\n (quotesWithMetadata, sortOrder): (QuoteResponse & QuoteMetadata)[] => {\n switch (sortOrder) {\n case SortOrder.ETA_ASC:\n return orderBy(\n quotesWithMetadata,\n (quote) => quote.estimatedProcessingTimeInSeconds,\n 'asc',\n );\n default:\n return orderBy(\n quotesWithMetadata,\n ({ cost }) =>\n cost.valueInCurrency ? Number(cost.valueInCurrency) : 0,\n 'asc',\n );\n }\n },\n);\n\nconst selectRecommendedQuote = createBridgeSelector(\n [selectSortedBridgeQuotes],\n (quotes) => (quotes.length > 0 ? quotes[0] : null),\n);\n\nconst selectActiveQuote = createBridgeSelector(\n [\n selectRecommendedQuote,\n (_, { selectedQuote }: BridgeQuotesClientParams) => selectedQuote,\n ],\n (recommendedQuote, selectedQuote) => selectedQuote ?? recommendedQuote,\n);\n\nconst selectIsQuoteGoingToRefresh = createBridgeSelector(\n [\n selectBridgeFeatureFlags,\n (state) => state.quoteRequest.insufficientBal,\n (state) => state.quotesRefreshCount,\n ],\n (featureFlags, insufficientBal, quotesRefreshCount) =>\n insufficientBal ? false : featureFlags.maxRefreshCount > quotesRefreshCount,\n);\n\nconst selectQuoteRefreshRate = createBridgeSelector(\n [selectBridgeFeatureFlags, (state) => state.quoteRequest.srcChainId],\n (featureFlags, srcChainId) =>\n (srcChainId\n ? featureFlags.chains[formatChainIdToCaip(srcChainId)]?.refreshRate\n : featureFlags.refreshRate) ?? featureFlags.refreshRate,\n);\n\nexport const selectIsQuoteExpired = createBridgeSelector(\n [\n selectIsQuoteGoingToRefresh,\n ({ quotesLastFetched }) => quotesLastFetched,\n selectQuoteRefreshRate,\n (_, __, currentTimeInMs: number) => currentTimeInMs,\n ],\n (isQuoteGoingToRefresh, quotesLastFetched, refreshRate, currentTimeInMs) =>\n Boolean(\n !isQuoteGoingToRefresh &&\n quotesLastFetched &&\n currentTimeInMs - quotesLastFetched > refreshRate,\n ),\n);\n\n/**\n * Selects sorted cross-chain swap quotes. By default, the quotes are sorted by cost in ascending order.\n *\n * @param state - The state of the bridge controller and its dependency controllers\n * @param sortOrder - The sort order of the quotes\n * @param selectedQuote - The quote that is currently selected by the user, should be cleared by clients when the req params change\n * @returns The activeQuote, recommendedQuote, sortedQuotes, and other quote fetching metadata\n *\n * @example\n * ```ts\n * const quotes = useSelector(state => selectBridgeQuotes(\n * { ...state.metamask, bridgeConfig: remoteFeatureFlags.bridgeConfig },\n * {\n * sortOrder: state.bridge.sortOrder,\n * selectedQuote: state.bridge.selectedQuote,\n * }\n * ));\n * ```\n */\nexport const selectBridgeQuotes = createStructuredBridgeSelector({\n sortedQuotes: selectSortedBridgeQuotes,\n recommendedQuote: selectRecommendedQuote,\n activeQuote: selectActiveQuote,\n quotesLastFetchedMs: (state) => state.quotesLastFetched,\n isLoading: (state) => state.quotesLoadingStatus === RequestStatus.LOADING,\n quoteFetchError: (state) => state.quoteFetchError,\n quotesRefreshCount: (state) => state.quotesRefreshCount,\n quotesInitialLoadTimeMs: (state) => state.quotesInitialLoadTime,\n isQuoteGoingToRefresh: selectIsQuoteGoingToRefresh,\n});\n"]}
@@ -1,6 +1,6 @@
1
1
  import type { CurrencyRateState, MultichainAssetsRatesControllerState, TokenRatesControllerState } from "@metamask/assets-controllers";
2
2
  import type { GasFeeEstimates } from "@metamask/gas-fee-controller";
3
- import type { BridgeControllerState, BridgeFeatureFlagsKey, ExchangeRate, GenericQuoteRequest, QuoteMetadata, QuoteResponse } from "./types.cjs";
3
+ import type { BridgeControllerState, ExchangeRate, GenericQuoteRequest, QuoteMetadata, QuoteResponse } from "./types.cjs";
4
4
  import { SortOrder } from "./types.cjs";
5
5
  /**
6
6
  * The controller states that provide exchange rates
@@ -9,18 +9,64 @@ type ExchangeRateControllerState = MultichainAssetsRatesControllerState & TokenR
9
9
  /**
10
10
  * The state of the bridge controller and all its dependency controllers
11
11
  */
12
+ type RemoteFeatureFlagControllerState = {
13
+ remoteFeatureFlags: {
14
+ bridgeConfig: unknown;
15
+ };
16
+ };
12
17
  export type BridgeAppState = BridgeControllerState & {
13
18
  gasFeeEstimates: GasFeeEstimates;
14
19
  } & ExchangeRateControllerState & {
15
20
  participateInMetaMetrics: boolean;
16
- };
21
+ } & RemoteFeatureFlagControllerState;
17
22
  /**
18
23
  * Required parameters that clients must provide for the bridge quotes selector
19
24
  */
20
25
  type BridgeQuotesClientParams = {
21
26
  sortOrder: SortOrder;
22
27
  selectedQuote: (QuoteResponse & QuoteMetadata) | null;
23
- featureFlagsKey: BridgeFeatureFlagsKey;
28
+ };
29
+ /**
30
+ * Selects the bridge feature flags
31
+ *
32
+ * @param state - The state of the bridge controller
33
+ * @returns The bridge feature flags
34
+ *
35
+ * @example
36
+ * ```ts
37
+ * const featureFlags = useSelector(state => selectBridgeFeatureFlags(state));
38
+ *
39
+ * Or
40
+ *
41
+ * export const selectBridgeFeatureFlags = createSelector(
42
+ * selectRemoteFeatureFlags,
43
+ * (remoteFeatureFlags) =>
44
+ * selectBridgeFeatureFlagsBase({
45
+ * bridgeConfig: remoteFeatureFlags.bridgeConfig,
46
+ * }),
47
+ * );
48
+ * ```
49
+ */
50
+ export declare const selectBridgeFeatureFlags: ((state: RemoteFeatureFlagControllerState) => import("./types.cjs").FeatureFlagsPlatformConfig) & {
51
+ clearCache: () => void;
52
+ resultsCount: () => number;
53
+ resetResultsCount: () => void;
54
+ } & {
55
+ resultFunc: (resultFuncArgs_0: any) => import("./types.cjs").FeatureFlagsPlatformConfig;
56
+ memoizedResultFunc: ((resultFuncArgs_0: any) => import("./types.cjs").FeatureFlagsPlatformConfig) & {
57
+ clearCache: () => void;
58
+ resultsCount: () => number;
59
+ resetResultsCount: () => void;
60
+ };
61
+ lastResult: () => import("./types.cjs").FeatureFlagsPlatformConfig;
62
+ dependencies: [(state: RemoteFeatureFlagControllerState) => unknown];
63
+ recomputations: () => number;
64
+ resetRecomputations: () => void;
65
+ dependencyRecomputations: () => number;
66
+ resetDependencyRecomputations: () => void;
67
+ } & {
68
+ argsMemoize: typeof import("reselect").weakMapMemoize;
69
+ memoize: typeof import("reselect").weakMapMemoize;
24
70
  };
25
71
  /**
26
72
  * Selects the asset exchange rate for a given chain and address
@@ -38,7 +84,7 @@ export declare const selectExchangeRateByChainIdAndAddress: (state: BridgeAppSta
38
84
  * @returns Whether an exchange rate is available for the given chain and address
39
85
  */
40
86
  export declare const selectIsAssetExchangeRateInState: (exchangeRateSources: ExchangeRateControllerState, chainId?: string | number | undefined, address?: string | undefined) => boolean;
41
- export declare const selectIsQuoteExpired: ((state: BridgeControllerState & {
87
+ export declare const selectIsQuoteExpired: ((state: RemoteFeatureFlagControllerState & BridgeControllerState & {
42
88
  gasFeeEstimates: GasFeeEstimates;
43
89
  } & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
44
90
  participateInMetaMetrics: boolean;
@@ -54,37 +100,86 @@ export declare const selectIsQuoteExpired: ((state: BridgeControllerState & {
54
100
  resetResultsCount: () => void;
55
101
  };
56
102
  lastResult: () => boolean;
57
- dependencies: [(state: BridgeAppState, { featureFlagsKey }: BridgeQuotesClientParams) => boolean, ({ quotesLastFetched }: BridgeAppState) => number | null, ((state: BridgeControllerState & {
103
+ dependencies: [((state: RemoteFeatureFlagControllerState & BridgeControllerState & {
58
104
  gasFeeEstimates: GasFeeEstimates;
59
105
  } & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
60
106
  participateInMetaMetrics: boolean;
61
- }, params_0: BridgeQuotesClientParams) => number) & {
107
+ }) => boolean) & {
62
108
  clearCache: () => void;
63
109
  resultsCount: () => number;
64
110
  resetResultsCount: () => void;
65
111
  } & {
66
- resultFunc: (resultFuncArgs_0: {
67
- refreshRate: number;
68
- maxRefreshCount: number;
69
- support: boolean;
70
- chains: Record<`${string}:${string}`, import("./types.cjs").ChainConfiguration>;
71
- }, resultFuncArgs_1: string | number | undefined) => number;
72
- memoizedResultFunc: ((resultFuncArgs_0: {
73
- refreshRate: number;
74
- maxRefreshCount: number;
75
- support: boolean;
76
- chains: Record<`${string}:${string}`, import("./types.cjs").ChainConfiguration>;
77
- }, resultFuncArgs_1: string | number | undefined) => number) & {
112
+ resultFunc: (resultFuncArgs_0: import("./types.cjs").FeatureFlagsPlatformConfig, resultFuncArgs_1: boolean | undefined, resultFuncArgs_2: number) => boolean;
113
+ memoizedResultFunc: ((resultFuncArgs_0: import("./types.cjs").FeatureFlagsPlatformConfig, resultFuncArgs_1: boolean | undefined, resultFuncArgs_2: number) => boolean) & {
114
+ clearCache: () => void;
115
+ resultsCount: () => number;
116
+ resetResultsCount: () => void;
117
+ };
118
+ lastResult: () => boolean;
119
+ dependencies: [((state: RemoteFeatureFlagControllerState) => import("./types.cjs").FeatureFlagsPlatformConfig) & {
120
+ clearCache: () => void;
121
+ resultsCount: () => number;
122
+ resetResultsCount: () => void;
123
+ } & {
124
+ resultFunc: (resultFuncArgs_0: any) => import("./types.cjs").FeatureFlagsPlatformConfig;
125
+ memoizedResultFunc: ((resultFuncArgs_0: any) => import("./types.cjs").FeatureFlagsPlatformConfig) & {
126
+ clearCache: () => void;
127
+ resultsCount: () => number;
128
+ resetResultsCount: () => void;
129
+ };
130
+ lastResult: () => import("./types.cjs").FeatureFlagsPlatformConfig;
131
+ dependencies: [(state: RemoteFeatureFlagControllerState) => unknown];
132
+ recomputations: () => number;
133
+ resetRecomputations: () => void;
134
+ dependencyRecomputations: () => number;
135
+ resetDependencyRecomputations: () => void;
136
+ } & {
137
+ argsMemoize: typeof import("reselect").weakMapMemoize;
138
+ memoize: typeof import("reselect").weakMapMemoize;
139
+ }, (state: BridgeAppState) => boolean | undefined, (state: BridgeAppState) => number];
140
+ recomputations: () => number;
141
+ resetRecomputations: () => void;
142
+ dependencyRecomputations: () => number;
143
+ resetDependencyRecomputations: () => void;
144
+ } & {
145
+ argsMemoize: typeof import("reselect").weakMapMemoize;
146
+ memoize: typeof import("reselect").weakMapMemoize;
147
+ }, ({ quotesLastFetched }: BridgeAppState) => number | null, ((state: RemoteFeatureFlagControllerState & BridgeControllerState & {
148
+ gasFeeEstimates: GasFeeEstimates;
149
+ } & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
150
+ participateInMetaMetrics: boolean;
151
+ }) => number) & {
152
+ clearCache: () => void;
153
+ resultsCount: () => number;
154
+ resetResultsCount: () => void;
155
+ } & {
156
+ resultFunc: (resultFuncArgs_0: import("./types.cjs").FeatureFlagsPlatformConfig, resultFuncArgs_1: string | number | undefined) => number;
157
+ memoizedResultFunc: ((resultFuncArgs_0: import("./types.cjs").FeatureFlagsPlatformConfig, resultFuncArgs_1: string | number | undefined) => number) & {
78
158
  clearCache: () => void;
79
159
  resultsCount: () => number;
80
160
  resetResultsCount: () => void;
81
161
  };
82
162
  lastResult: () => number;
83
- dependencies: [({ bridgeFeatureFlags }: BridgeAppState, { featureFlagsKey }: BridgeQuotesClientParams) => {
84
- refreshRate: number;
85
- maxRefreshCount: number;
86
- support: boolean;
87
- chains: Record<`${string}:${string}`, import("./types.cjs").ChainConfiguration>;
163
+ dependencies: [((state: RemoteFeatureFlagControllerState) => import("./types.cjs").FeatureFlagsPlatformConfig) & {
164
+ clearCache: () => void;
165
+ resultsCount: () => number;
166
+ resetResultsCount: () => void;
167
+ } & {
168
+ resultFunc: (resultFuncArgs_0: any) => import("./types.cjs").FeatureFlagsPlatformConfig;
169
+ memoizedResultFunc: ((resultFuncArgs_0: any) => import("./types.cjs").FeatureFlagsPlatformConfig) & {
170
+ clearCache: () => void;
171
+ resultsCount: () => number;
172
+ resetResultsCount: () => void;
173
+ };
174
+ lastResult: () => import("./types.cjs").FeatureFlagsPlatformConfig;
175
+ dependencies: [(state: RemoteFeatureFlagControllerState) => unknown];
176
+ recomputations: () => number;
177
+ resetRecomputations: () => void;
178
+ dependencyRecomputations: () => number;
179
+ resetDependencyRecomputations: () => void;
180
+ } & {
181
+ argsMemoize: typeof import("reselect").weakMapMemoize;
182
+ memoize: typeof import("reselect").weakMapMemoize;
88
183
  }, (state: BridgeAppState) => string | number | undefined];
89
184
  recomputations: () => number;
90
185
  resetRecomputations: () => void;
@@ -108,17 +203,15 @@ export declare const selectIsQuoteExpired: ((state: BridgeControllerState & {
108
203
  * @param state - The state of the bridge controller and its dependency controllers
109
204
  * @param sortOrder - The sort order of the quotes
110
205
  * @param selectedQuote - The quote that is currently selected by the user, should be cleared by clients when the req params change
111
- * @param featureFlagsKey - The feature flags key for the client (e.g. `BridgeFeatureFlagsKey.EXTENSION_CONFIG`
112
206
  * @returns The activeQuote, recommendedQuote, sortedQuotes, and other quote fetching metadata
113
207
  *
114
208
  * @example
115
209
  * ```ts
116
210
  * const quotes = useSelector(state => selectBridgeQuotes(
117
- * state.metamask,
211
+ * { ...state.metamask, bridgeConfig: remoteFeatureFlags.bridgeConfig },
118
212
  * {
119
213
  * sortOrder: state.bridge.sortOrder,
120
214
  * selectedQuote: state.bridge.selectedQuote,
121
- * featureFlagsKey: BridgeFeatureFlagsKey.EXTENSION_CONFIG,
122
215
  * }
123
216
  * ));
124
217
  * ```
@@ -127,7 +220,7 @@ export declare const selectBridgeQuotes: ((state: BridgeControllerState & {
127
220
  gasFeeEstimates: GasFeeEstimates;
128
221
  } & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
129
222
  participateInMetaMetrics: boolean;
130
- }, params_0: BridgeQuotesClientParams) => {
223
+ } & RemoteFeatureFlagControllerState, params_0: BridgeQuotesClientParams) => {
131
224
  sortedQuotes: (QuoteResponse & QuoteMetadata)[];
132
225
  recommendedQuote: (QuoteResponse & QuoteMetadata) | null;
133
226
  activeQuote: (QuoteResponse & QuoteMetadata) | null;
@@ -183,7 +276,7 @@ export declare const selectBridgeQuotes: ((state: BridgeControllerState & {
183
276
  gasFeeEstimates: GasFeeEstimates;
184
277
  } & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
185
278
  participateInMetaMetrics: boolean;
186
- }, params_0: BridgeQuotesClientParams) => (QuoteResponse & QuoteMetadata)[]) & {
279
+ } & RemoteFeatureFlagControllerState, params_0: BridgeQuotesClientParams) => (QuoteResponse & QuoteMetadata)[]) & {
187
280
  clearCache: () => void;
188
281
  resultsCount: () => number;
189
282
  resetResultsCount: () => void;
@@ -281,7 +374,7 @@ export declare const selectBridgeQuotes: ((state: BridgeControllerState & {
281
374
  gasFeeEstimates: GasFeeEstimates;
282
375
  } & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
283
376
  participateInMetaMetrics: boolean;
284
- }) => {
377
+ } & RemoteFeatureFlagControllerState) => {
285
378
  sentAmount: {
286
379
  amount: string;
287
380
  valueInCurrency: string | null;
@@ -469,7 +562,7 @@ export declare const selectBridgeQuotes: ((state: BridgeControllerState & {
469
562
  gasFeeEstimates: GasFeeEstimates;
470
563
  } & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
471
564
  participateInMetaMetrics: boolean;
472
- }) => {
565
+ } & RemoteFeatureFlagControllerState) => {
473
566
  estimatedBaseFeeInDecGwei: string;
474
567
  maxPriorityFeePerGasInDecGwei: string;
475
568
  maxFeePerGasInDecGwei: string;
@@ -509,7 +602,7 @@ export declare const selectBridgeQuotes: ((state: BridgeControllerState & {
509
602
  gasFeeEstimates: GasFeeEstimates;
510
603
  } & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
511
604
  participateInMetaMetrics: boolean;
512
- }) => ExchangeRate) & {
605
+ } & RemoteFeatureFlagControllerState) => ExchangeRate) & {
513
606
  clearCache: () => void;
514
607
  resultsCount: () => number;
515
608
  resetResultsCount: () => void;
@@ -533,7 +626,7 @@ export declare const selectBridgeQuotes: ((state: BridgeControllerState & {
533
626
  gasFeeEstimates: GasFeeEstimates;
534
627
  } & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
535
628
  participateInMetaMetrics: boolean;
536
- }) => ExchangeRate) & {
629
+ } & RemoteFeatureFlagControllerState) => ExchangeRate) & {
537
630
  clearCache: () => void;
538
631
  resultsCount: () => number;
539
632
  resetResultsCount: () => void;
@@ -557,7 +650,7 @@ export declare const selectBridgeQuotes: ((state: BridgeControllerState & {
557
650
  gasFeeEstimates: GasFeeEstimates;
558
651
  } & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
559
652
  participateInMetaMetrics: boolean;
560
- }) => ExchangeRate) & {
653
+ } & RemoteFeatureFlagControllerState) => ExchangeRate) & {
561
654
  clearCache: () => void;
562
655
  resultsCount: () => number;
563
656
  resetResultsCount: () => void;
@@ -597,7 +690,7 @@ export declare const selectBridgeQuotes: ((state: BridgeControllerState & {
597
690
  gasFeeEstimates: GasFeeEstimates;
598
691
  } & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
599
692
  participateInMetaMetrics: boolean;
600
- }, params_0: BridgeQuotesClientParams) => (QuoteResponse & QuoteMetadata) | null) & {
693
+ } & RemoteFeatureFlagControllerState, params_0: BridgeQuotesClientParams) => (QuoteResponse & QuoteMetadata) | null) & {
601
694
  clearCache: () => void;
602
695
  resultsCount: () => number;
603
696
  resetResultsCount: () => void;
@@ -613,7 +706,7 @@ export declare const selectBridgeQuotes: ((state: BridgeControllerState & {
613
706
  gasFeeEstimates: GasFeeEstimates;
614
707
  } & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
615
708
  participateInMetaMetrics: boolean;
616
- }, params_0: BridgeQuotesClientParams) => (QuoteResponse & QuoteMetadata)[]) & {
709
+ } & RemoteFeatureFlagControllerState, params_0: BridgeQuotesClientParams) => (QuoteResponse & QuoteMetadata)[]) & {
617
710
  clearCache: () => void;
618
711
  resultsCount: () => number;
619
712
  resetResultsCount: () => void;
@@ -711,7 +804,7 @@ export declare const selectBridgeQuotes: ((state: BridgeControllerState & {
711
804
  gasFeeEstimates: GasFeeEstimates;
712
805
  } & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
713
806
  participateInMetaMetrics: boolean;
714
- }) => {
807
+ } & RemoteFeatureFlagControllerState) => {
715
808
  sentAmount: {
716
809
  amount: string;
717
810
  valueInCurrency: string | null;
@@ -899,7 +992,7 @@ export declare const selectBridgeQuotes: ((state: BridgeControllerState & {
899
992
  gasFeeEstimates: GasFeeEstimates;
900
993
  } & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
901
994
  participateInMetaMetrics: boolean;
902
- }) => {
995
+ } & RemoteFeatureFlagControllerState) => {
903
996
  estimatedBaseFeeInDecGwei: string;
904
997
  maxPriorityFeePerGasInDecGwei: string;
905
998
  maxFeePerGasInDecGwei: string;
@@ -939,7 +1032,7 @@ export declare const selectBridgeQuotes: ((state: BridgeControllerState & {
939
1032
  gasFeeEstimates: GasFeeEstimates;
940
1033
  } & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
941
1034
  participateInMetaMetrics: boolean;
942
- }) => ExchangeRate) & {
1035
+ } & RemoteFeatureFlagControllerState) => ExchangeRate) & {
943
1036
  clearCache: () => void;
944
1037
  resultsCount: () => number;
945
1038
  resetResultsCount: () => void;
@@ -963,7 +1056,7 @@ export declare const selectBridgeQuotes: ((state: BridgeControllerState & {
963
1056
  gasFeeEstimates: GasFeeEstimates;
964
1057
  } & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
965
1058
  participateInMetaMetrics: boolean;
966
- }) => ExchangeRate) & {
1059
+ } & RemoteFeatureFlagControllerState) => ExchangeRate) & {
967
1060
  clearCache: () => void;
968
1061
  resultsCount: () => number;
969
1062
  resetResultsCount: () => void;
@@ -987,7 +1080,7 @@ export declare const selectBridgeQuotes: ((state: BridgeControllerState & {
987
1080
  gasFeeEstimates: GasFeeEstimates;
988
1081
  } & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
989
1082
  participateInMetaMetrics: boolean;
990
- }) => ExchangeRate) & {
1083
+ } & RemoteFeatureFlagControllerState) => ExchangeRate) & {
991
1084
  clearCache: () => void;
992
1085
  resultsCount: () => number;
993
1086
  resetResultsCount: () => void;
@@ -1035,7 +1128,7 @@ export declare const selectBridgeQuotes: ((state: BridgeControllerState & {
1035
1128
  gasFeeEstimates: GasFeeEstimates;
1036
1129
  } & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
1037
1130
  participateInMetaMetrics: boolean;
1038
- }, params_0: BridgeQuotesClientParams) => (QuoteResponse & QuoteMetadata) | null) & {
1131
+ } & RemoteFeatureFlagControllerState, params_0: BridgeQuotesClientParams) => (QuoteResponse & QuoteMetadata) | null) & {
1039
1132
  clearCache: () => void;
1040
1133
  resultsCount: () => number;
1041
1134
  resetResultsCount: () => void;
@@ -1051,7 +1144,7 @@ export declare const selectBridgeQuotes: ((state: BridgeControllerState & {
1051
1144
  gasFeeEstimates: GasFeeEstimates;
1052
1145
  } & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
1053
1146
  participateInMetaMetrics: boolean;
1054
- }, params_0: BridgeQuotesClientParams) => (QuoteResponse & QuoteMetadata) | null) & {
1147
+ } & RemoteFeatureFlagControllerState, params_0: BridgeQuotesClientParams) => (QuoteResponse & QuoteMetadata) | null) & {
1055
1148
  clearCache: () => void;
1056
1149
  resultsCount: () => number;
1057
1150
  resetResultsCount: () => void;
@@ -1067,7 +1160,7 @@ export declare const selectBridgeQuotes: ((state: BridgeControllerState & {
1067
1160
  gasFeeEstimates: GasFeeEstimates;
1068
1161
  } & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
1069
1162
  participateInMetaMetrics: boolean;
1070
- }, params_0: BridgeQuotesClientParams) => (QuoteResponse & QuoteMetadata)[]) & {
1163
+ } & RemoteFeatureFlagControllerState, params_0: BridgeQuotesClientParams) => (QuoteResponse & QuoteMetadata)[]) & {
1071
1164
  clearCache: () => void;
1072
1165
  resultsCount: () => number;
1073
1166
  resetResultsCount: () => void;
@@ -1165,7 +1258,7 @@ export declare const selectBridgeQuotes: ((state: BridgeControllerState & {
1165
1258
  gasFeeEstimates: GasFeeEstimates;
1166
1259
  } & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
1167
1260
  participateInMetaMetrics: boolean;
1168
- }) => {
1261
+ } & RemoteFeatureFlagControllerState) => {
1169
1262
  sentAmount: {
1170
1263
  amount: string;
1171
1264
  valueInCurrency: string | null;
@@ -1353,7 +1446,7 @@ export declare const selectBridgeQuotes: ((state: BridgeControllerState & {
1353
1446
  gasFeeEstimates: GasFeeEstimates;
1354
1447
  } & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
1355
1448
  participateInMetaMetrics: boolean;
1356
- }) => {
1449
+ } & RemoteFeatureFlagControllerState) => {
1357
1450
  estimatedBaseFeeInDecGwei: string;
1358
1451
  maxPriorityFeePerGasInDecGwei: string;
1359
1452
  maxFeePerGasInDecGwei: string;
@@ -1393,7 +1486,7 @@ export declare const selectBridgeQuotes: ((state: BridgeControllerState & {
1393
1486
  gasFeeEstimates: GasFeeEstimates;
1394
1487
  } & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
1395
1488
  participateInMetaMetrics: boolean;
1396
- }) => ExchangeRate) & {
1489
+ } & RemoteFeatureFlagControllerState) => ExchangeRate) & {
1397
1490
  clearCache: () => void;
1398
1491
  resultsCount: () => number;
1399
1492
  resetResultsCount: () => void;
@@ -1417,7 +1510,7 @@ export declare const selectBridgeQuotes: ((state: BridgeControllerState & {
1417
1510
  gasFeeEstimates: GasFeeEstimates;
1418
1511
  } & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
1419
1512
  participateInMetaMetrics: boolean;
1420
- }) => ExchangeRate) & {
1513
+ } & RemoteFeatureFlagControllerState) => ExchangeRate) & {
1421
1514
  clearCache: () => void;
1422
1515
  resultsCount: () => number;
1423
1516
  resetResultsCount: () => void;
@@ -1441,7 +1534,7 @@ export declare const selectBridgeQuotes: ((state: BridgeControllerState & {
1441
1534
  gasFeeEstimates: GasFeeEstimates;
1442
1535
  } & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
1443
1536
  participateInMetaMetrics: boolean;
1444
- }) => ExchangeRate) & {
1537
+ } & RemoteFeatureFlagControllerState) => ExchangeRate) & {
1445
1538
  clearCache: () => void;
1446
1539
  resultsCount: () => number;
1447
1540
  resetResultsCount: () => void;
@@ -1493,7 +1586,51 @@ export declare const selectBridgeQuotes: ((state: BridgeControllerState & {
1493
1586
  } & {
1494
1587
  argsMemoize: typeof import("reselect").weakMapMemoize;
1495
1588
  memoize: typeof import("reselect").weakMapMemoize;
1496
- }, (state: BridgeAppState) => number | null, (state: BridgeAppState) => boolean, (state: BridgeAppState) => number | null, (state: BridgeAppState, { featureFlagsKey }: BridgeQuotesClientParams) => boolean];
1589
+ }, (state: BridgeAppState) => number | null, (state: BridgeAppState) => boolean, (state: BridgeAppState) => number | null, ((state: RemoteFeatureFlagControllerState & BridgeControllerState & {
1590
+ gasFeeEstimates: GasFeeEstimates;
1591
+ } & MultichainAssetsRatesControllerState & TokenRatesControllerState & CurrencyRateState & Pick<BridgeControllerState, "assetExchangeRates"> & {
1592
+ participateInMetaMetrics: boolean;
1593
+ }) => boolean) & {
1594
+ clearCache: () => void;
1595
+ resultsCount: () => number;
1596
+ resetResultsCount: () => void;
1597
+ } & {
1598
+ resultFunc: (resultFuncArgs_0: import("./types.cjs").FeatureFlagsPlatformConfig, resultFuncArgs_1: boolean | undefined, resultFuncArgs_2: number) => boolean;
1599
+ memoizedResultFunc: ((resultFuncArgs_0: import("./types.cjs").FeatureFlagsPlatformConfig, resultFuncArgs_1: boolean | undefined, resultFuncArgs_2: number) => boolean) & {
1600
+ clearCache: () => void;
1601
+ resultsCount: () => number;
1602
+ resetResultsCount: () => void;
1603
+ };
1604
+ lastResult: () => boolean;
1605
+ dependencies: [((state: RemoteFeatureFlagControllerState) => import("./types.cjs").FeatureFlagsPlatformConfig) & {
1606
+ clearCache: () => void;
1607
+ resultsCount: () => number;
1608
+ resetResultsCount: () => void;
1609
+ } & {
1610
+ resultFunc: (resultFuncArgs_0: any) => import("./types.cjs").FeatureFlagsPlatformConfig;
1611
+ memoizedResultFunc: ((resultFuncArgs_0: any) => import("./types.cjs").FeatureFlagsPlatformConfig) & {
1612
+ clearCache: () => void;
1613
+ resultsCount: () => number;
1614
+ resetResultsCount: () => void;
1615
+ };
1616
+ lastResult: () => import("./types.cjs").FeatureFlagsPlatformConfig;
1617
+ dependencies: [(state: RemoteFeatureFlagControllerState) => unknown];
1618
+ recomputations: () => number;
1619
+ resetRecomputations: () => void;
1620
+ dependencyRecomputations: () => number;
1621
+ resetDependencyRecomputations: () => void;
1622
+ } & {
1623
+ argsMemoize: typeof import("reselect").weakMapMemoize;
1624
+ memoize: typeof import("reselect").weakMapMemoize;
1625
+ }, (state: BridgeAppState) => boolean | undefined, (state: BridgeAppState) => number];
1626
+ recomputations: () => number;
1627
+ resetRecomputations: () => void;
1628
+ dependencyRecomputations: () => number;
1629
+ resetDependencyRecomputations: () => void;
1630
+ } & {
1631
+ argsMemoize: typeof import("reselect").weakMapMemoize;
1632
+ memoize: typeof import("reselect").weakMapMemoize;
1633
+ }];
1497
1634
  recomputations: () => number;
1498
1635
  resetRecomputations: () => void;
1499
1636
  dependencyRecomputations: () => number;
@@ -1 +1 @@
1
- {"version":3,"file":"selectors.d.cts","sourceRoot":"","sources":["../src/selectors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"selectors.d.cts","sourceRoot":"","sources":["../src/selectors.ts"],"names":[],"mappings":"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"}