@metamask/bridge-controller 43.0.0 → 43.2.0

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 (56) hide show
  1. package/CHANGELOG.md +25 -1
  2. package/dist/bridge-controller.cjs +18 -0
  3. package/dist/bridge-controller.cjs.map +1 -1
  4. package/dist/bridge-controller.d.cts.map +1 -1
  5. package/dist/bridge-controller.d.mts.map +1 -1
  6. package/dist/bridge-controller.mjs +18 -0
  7. package/dist/bridge-controller.mjs.map +1 -1
  8. package/dist/constants/bridge.cjs +1 -2
  9. package/dist/constants/bridge.cjs.map +1 -1
  10. package/dist/constants/bridge.d.cts +0 -1
  11. package/dist/constants/bridge.d.cts.map +1 -1
  12. package/dist/constants/bridge.d.mts +0 -1
  13. package/dist/constants/bridge.d.mts.map +1 -1
  14. package/dist/constants/bridge.mjs +0 -1
  15. package/dist/constants/bridge.mjs.map +1 -1
  16. package/dist/index.cjs +5 -3
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.cts +3 -2
  19. package/dist/index.d.cts.map +1 -1
  20. package/dist/index.d.mts +3 -2
  21. package/dist/index.d.mts.map +1 -1
  22. package/dist/index.mjs +3 -2
  23. package/dist/index.mjs.map +1 -1
  24. package/dist/selectors.cjs +20 -1
  25. package/dist/selectors.cjs.map +1 -1
  26. package/dist/selectors.d.cts +100 -0
  27. package/dist/selectors.d.cts.map +1 -1
  28. package/dist/selectors.d.mts +100 -0
  29. package/dist/selectors.d.mts.map +1 -1
  30. package/dist/selectors.mjs +19 -0
  31. package/dist/selectors.mjs.map +1 -1
  32. package/dist/utils/metrics/properties.cjs +6 -0
  33. package/dist/utils/metrics/properties.cjs.map +1 -1
  34. package/dist/utils/metrics/properties.d.cts +6 -0
  35. package/dist/utils/metrics/properties.d.cts.map +1 -1
  36. package/dist/utils/metrics/properties.d.mts +6 -0
  37. package/dist/utils/metrics/properties.d.mts.map +1 -1
  38. package/dist/utils/metrics/properties.mjs +6 -0
  39. package/dist/utils/metrics/properties.mjs.map +1 -1
  40. package/dist/utils/slippage.cjs +49 -0
  41. package/dist/utils/slippage.cjs.map +1 -0
  42. package/dist/utils/slippage.d.cts +23 -0
  43. package/dist/utils/slippage.d.cts.map +1 -0
  44. package/dist/utils/slippage.d.mts +23 -0
  45. package/dist/utils/slippage.d.mts.map +1 -0
  46. package/dist/utils/slippage.mjs +45 -0
  47. package/dist/utils/slippage.mjs.map +1 -0
  48. package/dist/utils/validators.cjs +2 -0
  49. package/dist/utils/validators.cjs.map +1 -1
  50. package/dist/utils/validators.d.cts +10 -0
  51. package/dist/utils/validators.d.cts.map +1 -1
  52. package/dist/utils/validators.d.mts +10 -0
  53. package/dist/utils/validators.d.mts.map +1 -1
  54. package/dist/utils/validators.mjs +2 -0
  55. package/dist/utils/validators.mjs.map +1 -1
  56. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"bridge-controller.mjs","sourceRoot":"","sources":["../src/bridge-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BigNumber } from '@ethersproject/bignumber';\nimport { Contract } from '@ethersproject/contracts';\nimport { Web3Provider } from '@ethersproject/providers';\nimport type { StateMetadata } from '@metamask/base-controller';\nimport type { TraceCallback } from '@metamask/controller-utils';\nimport { abiERC20 } from '@metamask/metamask-eth-abis';\nimport type { NetworkClientId } from '@metamask/network-controller';\nimport { StaticIntervalPollingController } from '@metamask/polling-controller';\nimport type { TransactionController } from '@metamask/transaction-controller';\nimport type { CaipAssetType } from '@metamask/utils';\nimport { numberToHex, type Hex } from '@metamask/utils';\n\nimport {\n type BridgeClientId,\n BRIDGE_CONTROLLER_NAME,\n BRIDGE_PROD_API_BASE_URL,\n DEFAULT_BRIDGE_CONTROLLER_STATE,\n METABRIDGE_CHAIN_TO_ADDRESS_MAP,\n REFRESH_INTERVAL_MS,\n} from './constants/bridge';\nimport { CHAIN_IDS } from './constants/chains';\nimport { TraceName } from './constants/traces';\nimport { selectIsAssetExchangeRateInState } from './selectors';\nimport type { QuoteRequest } from './types';\nimport {\n type L1GasFees,\n type GenericQuoteRequest,\n type SolanaFees,\n type QuoteResponse,\n type TxData,\n type BridgeControllerState,\n type BridgeControllerMessenger,\n type FetchFunction,\n RequestStatus,\n} from './types';\nimport { getAssetIdsForToken, toExchangeRates } from './utils/assets';\nimport { hasSufficientBalance } from './utils/balance';\nimport {\n getDefaultBridgeControllerState,\n isCrossChain,\n isSolanaChainId,\n sumHexes,\n} from './utils/bridge';\nimport {\n formatAddressToCaipReference,\n formatChainIdToCaip,\n formatChainIdToHex,\n} from './utils/caip-formatters';\nimport { getBridgeFeatureFlags } from './utils/feature-flags';\nimport { fetchAssetPrices, fetchBridgeQuotes } from './utils/fetch';\nimport {\n AbortReason,\n MetricsActionType,\n UnifiedSwapBridgeEventName,\n} from './utils/metrics/constants';\nimport {\n formatProviderLabel,\n getRequestParams,\n getSwapTypeFromQuote,\n isCustomSlippage,\n isHardwareWallet,\n toInputChangedPropertyKey,\n toInputChangedPropertyValue,\n} from './utils/metrics/properties';\nimport type {\n QuoteFetchData,\n RequestMetadata,\n RequestParams,\n RequiredEventContextFromClient,\n} from './utils/metrics/types';\nimport { type CrossChainSwapsEventProperties } from './utils/metrics/types';\nimport { isValidQuoteRequest } from './utils/quote';\nimport {\n getFeeForTransactionRequest,\n getMinimumBalanceForRentExemptionRequest,\n} from './utils/snaps';\nimport { FeatureId } from './utils/validators';\n\nconst metadata: StateMetadata<BridgeControllerState> = {\n quoteRequest: {\n persist: false,\n anonymous: false,\n },\n quotes: {\n persist: false,\n anonymous: false,\n },\n quotesInitialLoadTime: {\n persist: false,\n anonymous: false,\n },\n quotesLastFetched: {\n persist: false,\n anonymous: false,\n },\n quotesLoadingStatus: {\n persist: false,\n anonymous: false,\n },\n quoteFetchError: {\n persist: false,\n anonymous: false,\n },\n quotesRefreshCount: {\n persist: false,\n anonymous: false,\n },\n assetExchangeRates: {\n persist: false,\n anonymous: false,\n },\n minimumBalanceForRentExemptionInLamports: {\n persist: false,\n anonymous: false,\n },\n};\n\n/**\n * The input to start polling for the {@link BridgeController}\n *\n * @param networkClientId - The network client ID of the selected network\n * @param updatedQuoteRequest - The updated quote request\n * @param context - The context contains properties that can't be populated by the\n * controller and need to be provided by the client for analytics\n */\ntype BridgePollingInput = {\n networkClientId: NetworkClientId;\n updatedQuoteRequest: GenericQuoteRequest;\n context: Pick<\n RequiredEventContextFromClient,\n UnifiedSwapBridgeEventName.QuotesError\n >[UnifiedSwapBridgeEventName.QuotesError] &\n Pick<\n RequiredEventContextFromClient,\n UnifiedSwapBridgeEventName.QuotesRequested\n >[UnifiedSwapBridgeEventName.QuotesRequested];\n};\n\nexport class BridgeController extends StaticIntervalPollingController<BridgePollingInput>()<\n typeof BRIDGE_CONTROLLER_NAME,\n BridgeControllerState,\n BridgeControllerMessenger\n> {\n #abortController: AbortController | undefined;\n\n #quotesFirstFetched: number | undefined;\n\n readonly #clientId: string;\n\n readonly #getLayer1GasFee: typeof TransactionController.prototype.getLayer1GasFee;\n\n readonly #fetchFn: FetchFunction;\n\n readonly #trackMetaMetricsFn: <\n T extends\n (typeof UnifiedSwapBridgeEventName)[keyof typeof UnifiedSwapBridgeEventName],\n >(\n eventName: T,\n properties: CrossChainSwapsEventProperties<T>,\n ) => void;\n\n readonly #trace: TraceCallback;\n\n readonly #config: {\n customBridgeApiBaseUrl?: string;\n };\n\n constructor({\n messenger,\n state,\n clientId,\n getLayer1GasFee,\n fetchFn,\n config,\n trackMetaMetricsFn,\n traceFn,\n }: {\n messenger: BridgeControllerMessenger;\n state?: Partial<BridgeControllerState>;\n clientId: BridgeClientId;\n getLayer1GasFee: typeof TransactionController.prototype.getLayer1GasFee;\n fetchFn: FetchFunction;\n config?: {\n customBridgeApiBaseUrl?: string;\n };\n trackMetaMetricsFn: <\n T extends\n (typeof UnifiedSwapBridgeEventName)[keyof typeof UnifiedSwapBridgeEventName],\n >(\n eventName: T,\n properties: CrossChainSwapsEventProperties<T>,\n ) => void;\n traceFn?: TraceCallback;\n }) {\n super({\n name: BRIDGE_CONTROLLER_NAME,\n metadata,\n messenger,\n state: {\n ...getDefaultBridgeControllerState(),\n ...state,\n },\n });\n\n this.setIntervalLength(REFRESH_INTERVAL_MS);\n\n this.#abortController = new AbortController();\n this.#getLayer1GasFee = getLayer1GasFee;\n this.#clientId = clientId;\n this.#fetchFn = fetchFn;\n this.#trackMetaMetricsFn = trackMetaMetricsFn;\n this.#config = config ?? {};\n this.#trace = traceFn ?? (((_request, fn) => fn?.()) as TraceCallback);\n\n // Register action handlers\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_CONTROLLER_NAME}:setChainIntervalLength`,\n this.setChainIntervalLength.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_CONTROLLER_NAME}:updateBridgeQuoteRequestParams`,\n this.updateBridgeQuoteRequestParams.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_CONTROLLER_NAME}:resetState`,\n this.resetState.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_CONTROLLER_NAME}:getBridgeERC20Allowance`,\n this.getBridgeERC20Allowance.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_CONTROLLER_NAME}:trackUnifiedSwapBridgeEvent`,\n this.trackUnifiedSwapBridgeEvent.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_CONTROLLER_NAME}:stopPollingForQuotes`,\n this.stopPollingForQuotes.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_CONTROLLER_NAME}:fetchQuotes`,\n this.fetchQuotes.bind(this),\n );\n }\n\n _executePoll = async (pollingInput: BridgePollingInput) => {\n await this.#fetchBridgeQuotes(pollingInput);\n };\n\n updateBridgeQuoteRequestParams = async (\n paramsToUpdate: Partial<GenericQuoteRequest>,\n context: BridgePollingInput['context'],\n ) => {\n this.stopAllPolling();\n this.#abortController?.abort(AbortReason.QuoteRequestUpdated);\n\n this.#trackInputChangedEvents(paramsToUpdate);\n\n const updatedQuoteRequest = {\n ...DEFAULT_BRIDGE_CONTROLLER_STATE.quoteRequest,\n ...paramsToUpdate,\n };\n\n this.update((state) => {\n state.quoteRequest = updatedQuoteRequest;\n state.quotes = DEFAULT_BRIDGE_CONTROLLER_STATE.quotes;\n state.quotesLastFetched =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quotesLastFetched;\n state.quotesLoadingStatus =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quotesLoadingStatus;\n state.quoteFetchError = DEFAULT_BRIDGE_CONTROLLER_STATE.quoteFetchError;\n state.quotesRefreshCount =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quotesRefreshCount;\n state.quotesInitialLoadTime =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quotesInitialLoadTime;\n // Reset required minimum balance if the source chain is not Solana\n if (\n updatedQuoteRequest.srcChainId &&\n !isSolanaChainId(updatedQuoteRequest.srcChainId)\n ) {\n state.minimumBalanceForRentExemptionInLamports =\n DEFAULT_BRIDGE_CONTROLLER_STATE.minimumBalanceForRentExemptionInLamports;\n }\n });\n\n await this.#fetchAssetExchangeRates(updatedQuoteRequest).catch((error) =>\n console.warn('Failed to fetch asset exchange rates', error),\n );\n\n if (isValidQuoteRequest(updatedQuoteRequest)) {\n this.#quotesFirstFetched = Date.now();\n const providerConfig = this.#getSelectedNetworkClient()?.configuration;\n\n let insufficientBal: boolean | undefined;\n if (isSolanaChainId(updatedQuoteRequest.srcChainId)) {\n // If the source chain is not an EVM network, use value from params\n insufficientBal = paramsToUpdate.insufficientBal;\n } else if (providerConfig?.rpcUrl?.includes('tenderly')) {\n // If the rpcUrl is a tenderly fork (e2e tests), set insufficientBal=true\n // The bridge-api filters out quotes if the balance on mainnet is insufficient so this override allows quotes to always be returned\n insufficientBal = true;\n } else {\n // Otherwise query the src token balance from the RPC provider\n insufficientBal =\n paramsToUpdate.insufficientBal ??\n !(await this.#hasSufficientBalance(updatedQuoteRequest));\n }\n\n const networkClientId = this.#getSelectedNetworkClientId();\n // Set refresh rate based on the source chain before starting polling\n this.setChainIntervalLength();\n this.startPolling({\n networkClientId,\n updatedQuoteRequest: {\n ...updatedQuoteRequest,\n insufficientBal,\n },\n context,\n });\n }\n };\n\n /**\n * Fetches quotes for specified request without updating the controller state\n * This method does not start polling for quotes and does not emit UnifiedSwapBridge events\n *\n * @param quoteRequest - The parameters for quote requests to fetch\n * @param abortSignal - The abort signal to cancel all the requests\n * @param featureId - The feature ID that maps to quoteParam overrides from LD\n * @returns A list of validated quotes\n */\n fetchQuotes = async (\n quoteRequest: GenericQuoteRequest,\n abortSignal: AbortSignal | null = null,\n featureId: FeatureId | null = null,\n ): Promise<QuoteResponse[]> => {\n const bridgeFeatureFlags = getBridgeFeatureFlags(this.messagingSystem);\n // If featureId is specified, retrieve the quoteRequestOverrides for that featureId\n const quoteRequestOverrides = featureId\n ? bridgeFeatureFlags.quoteRequestOverrides?.[featureId]\n : undefined;\n\n // If quoteRequestOverrides is specified, merge it with the quoteRequest\n const { quotes: baseQuotes, validationFailures } = await fetchBridgeQuotes(\n quoteRequestOverrides\n ? { ...quoteRequest, ...quoteRequestOverrides }\n : quoteRequest,\n abortSignal,\n this.#clientId,\n this.#fetchFn,\n this.#config.customBridgeApiBaseUrl ?? BRIDGE_PROD_API_BASE_URL,\n );\n\n this.#trackResponseValidationFailures(validationFailures);\n\n const quotesWithL1GasFees = await this.#appendL1GasFees(baseQuotes);\n const quotesWithSolanaFees = await this.#appendSolanaFees(baseQuotes);\n const quotesWithFees =\n quotesWithL1GasFees ?? quotesWithSolanaFees ?? baseQuotes;\n // Sort perps quotes by increasing estimated processing time (fastest first)\n if (featureId === FeatureId.PERPS) {\n return quotesWithFees.sort((a, b) => {\n return (\n a.estimatedProcessingTimeInSeconds -\n b.estimatedProcessingTimeInSeconds\n );\n });\n }\n return quotesWithFees;\n };\n\n readonly #trackResponseValidationFailures = (\n validationFailures: string[],\n ) => {\n if (validationFailures.length === 0) {\n return;\n }\n this.trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.QuotesValidationFailed,\n {\n failures: validationFailures,\n },\n );\n };\n\n readonly #getExchangeRateSources = () => {\n return {\n ...this.messagingSystem.call('MultichainAssetsRatesController:getState'),\n ...this.messagingSystem.call('CurrencyRateController:getState'),\n ...this.messagingSystem.call('TokenRatesController:getState'),\n ...this.state,\n };\n };\n\n /**\n * Fetches the exchange rates for the assets in the quote request if they are not already in the state\n * In addition to the selected tokens, this also fetches the native asset for the source and destination chains\n *\n * @param quoteRequest - The quote request\n * @param quoteRequest.srcChainId - The source chain ID\n * @param quoteRequest.srcTokenAddress - The source token address\n * @param quoteRequest.destChainId - The destination chain ID\n * @param quoteRequest.destTokenAddress - The destination token address\n */\n readonly #fetchAssetExchangeRates = async ({\n srcChainId,\n srcTokenAddress,\n destChainId,\n destTokenAddress,\n }: Partial<GenericQuoteRequest>) => {\n const assetIds: Set<CaipAssetType> = new Set([]);\n const exchangeRateSources = this.#getExchangeRateSources();\n if (\n srcTokenAddress &&\n srcChainId &&\n !selectIsAssetExchangeRateInState(\n exchangeRateSources,\n srcChainId,\n srcTokenAddress,\n )\n ) {\n getAssetIdsForToken(srcTokenAddress, srcChainId).forEach((assetId) =>\n assetIds.add(assetId),\n );\n }\n if (\n destTokenAddress &&\n destChainId &&\n !selectIsAssetExchangeRateInState(\n exchangeRateSources,\n destChainId,\n destTokenAddress,\n )\n ) {\n getAssetIdsForToken(destTokenAddress, destChainId).forEach((assetId) =>\n assetIds.add(assetId),\n );\n }\n\n const currency = this.messagingSystem.call(\n 'CurrencyRateController:getState',\n ).currentCurrency;\n\n if (assetIds.size === 0) {\n return;\n }\n\n const pricesByAssetId = await fetchAssetPrices({\n assetIds,\n currencies: new Set([currency]),\n clientId: this.#clientId,\n fetchFn: this.#fetchFn,\n });\n const exchangeRates = toExchangeRates(currency, pricesByAssetId);\n this.update((state) => {\n state.assetExchangeRates = {\n ...state.assetExchangeRates,\n ...exchangeRates,\n };\n });\n };\n\n readonly #hasSufficientBalance = async (\n quoteRequest: GenericQuoteRequest,\n ) => {\n const walletAddress = this.#getMultichainSelectedAccount()?.address;\n const srcChainIdInHex = formatChainIdToHex(quoteRequest.srcChainId);\n const provider = this.#getSelectedNetworkClient()?.provider;\n const normalizedSrcTokenAddress = formatAddressToCaipReference(\n quoteRequest.srcTokenAddress,\n );\n\n return (\n provider &&\n walletAddress &&\n normalizedSrcTokenAddress &&\n quoteRequest.srcTokenAmount &&\n srcChainIdInHex &&\n (await hasSufficientBalance(\n provider,\n walletAddress,\n normalizedSrcTokenAddress,\n quoteRequest.srcTokenAmount,\n srcChainIdInHex,\n ))\n );\n };\n\n stopPollingForQuotes = (reason?: AbortReason) => {\n this.stopAllPolling();\n this.#abortController?.abort(reason);\n };\n\n resetState = () => {\n this.stopPollingForQuotes(AbortReason.ResetState);\n\n this.update((state) => {\n // Cannot do direct assignment to state, i.e. state = {... }, need to manually assign each field\n state.quoteRequest = DEFAULT_BRIDGE_CONTROLLER_STATE.quoteRequest;\n state.quotesInitialLoadTime =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quotesInitialLoadTime;\n state.quotes = DEFAULT_BRIDGE_CONTROLLER_STATE.quotes;\n state.quotesLastFetched =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quotesLastFetched;\n state.quotesLoadingStatus =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quotesLoadingStatus;\n state.quoteFetchError = DEFAULT_BRIDGE_CONTROLLER_STATE.quoteFetchError;\n state.quotesRefreshCount =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quotesRefreshCount;\n state.assetExchangeRates =\n DEFAULT_BRIDGE_CONTROLLER_STATE.assetExchangeRates;\n state.minimumBalanceForRentExemptionInLamports =\n DEFAULT_BRIDGE_CONTROLLER_STATE.minimumBalanceForRentExemptionInLamports;\n });\n };\n\n /**\n * Sets the interval length based on the source chain\n */\n setChainIntervalLength = () => {\n const { state } = this;\n const { srcChainId } = state.quoteRequest;\n const bridgeFeatureFlags = getBridgeFeatureFlags(this.messagingSystem);\n\n const refreshRateOverride = srcChainId\n ? bridgeFeatureFlags.chains[formatChainIdToCaip(srcChainId)]?.refreshRate\n : undefined;\n const defaultRefreshRate = bridgeFeatureFlags.refreshRate;\n this.setIntervalLength(refreshRateOverride ?? defaultRefreshRate);\n };\n\n readonly #fetchBridgeQuotes = async ({\n networkClientId: _networkClientId,\n updatedQuoteRequest,\n context,\n }: BridgePollingInput) => {\n this.#abortController?.abort('New quote request');\n this.#abortController = new AbortController();\n\n this.trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.QuotesRequested,\n context,\n );\n this.update((state) => {\n state.quotesLoadingStatus = RequestStatus.LOADING;\n state.quoteRequest = updatedQuoteRequest;\n state.quoteFetchError = DEFAULT_BRIDGE_CONTROLLER_STATE.quoteFetchError;\n });\n\n try {\n await this.#trace(\n {\n name: isCrossChain(\n updatedQuoteRequest.srcChainId,\n updatedQuoteRequest.destChainId,\n )\n ? TraceName.BridgeQuotesFetched\n : TraceName.SwapQuotesFetched,\n data: {\n srcChainId: formatChainIdToCaip(updatedQuoteRequest.srcChainId),\n destChainId: formatChainIdToCaip(updatedQuoteRequest.destChainId),\n },\n },\n async () => {\n // This call is not awaited to prevent blocking quote fetching if the snap takes too long to respond\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.#setMinimumBalanceForRentExemptionInLamports(\n updatedQuoteRequest.srcChainId,\n );\n const quotes = await this.fetchQuotes(\n updatedQuoteRequest,\n // AbortController is always defined by this line, because we assign it a few lines above,\n // not sure why Jest thinks it's not\n // Linters accurately say that it's defined\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.#abortController!.signal as AbortSignal,\n );\n\n this.update((state) => {\n state.quotes = quotes;\n state.quotesLoadingStatus = RequestStatus.FETCHED;\n });\n },\n );\n } catch (error) {\n const isAbortError = (error as Error).name === 'AbortError';\n if (\n isAbortError ||\n [\n AbortReason.ResetState,\n AbortReason.NewQuoteRequest,\n AbortReason.QuoteRequestUpdated,\n ].includes(error as AbortReason)\n ) {\n // Exit the function early to prevent other state updates\n return;\n }\n\n this.update((state) => {\n state.quoteFetchError =\n error instanceof Error ? error.message : (error?.toString() ?? null);\n state.quotesLoadingStatus = RequestStatus.ERROR;\n state.quotes = DEFAULT_BRIDGE_CONTROLLER_STATE.quotes;\n });\n this.trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.QuotesError,\n context,\n );\n console.log('Failed to fetch bridge quotes', error);\n }\n const bridgeFeatureFlags = getBridgeFeatureFlags(this.messagingSystem);\n const { maxRefreshCount } = bridgeFeatureFlags;\n\n // Stop polling if the maximum number of refreshes has been reached\n if (\n updatedQuoteRequest.insufficientBal ||\n (!updatedQuoteRequest.insufficientBal &&\n this.state.quotesRefreshCount >= maxRefreshCount)\n ) {\n this.stopAllPolling();\n }\n\n // Update quote fetching stats\n const quotesLastFetched = Date.now();\n this.update((state) => {\n state.quotesInitialLoadTime =\n state.quotesRefreshCount === 0 && this.#quotesFirstFetched\n ? quotesLastFetched - this.#quotesFirstFetched\n : this.state.quotesInitialLoadTime;\n state.quotesLastFetched = quotesLastFetched;\n state.quotesRefreshCount += 1;\n });\n };\n\n readonly #appendL1GasFees = async (\n quotes: QuoteResponse[],\n ): Promise<(QuoteResponse & L1GasFees)[] | undefined> => {\n // Indicates whether some of the quotes are not for optimism or base\n const hasInvalidQuotes = quotes.some(({ quote }) => {\n const chainId = formatChainIdToCaip(quote.srcChainId);\n return ![CHAIN_IDS.OPTIMISM, CHAIN_IDS.BASE]\n .map(formatChainIdToCaip)\n .includes(chainId);\n });\n\n // Only append L1 gas fees if all quotes are for either optimism or base\n if (hasInvalidQuotes) {\n return undefined;\n }\n\n const l1GasFeePromises = Promise.allSettled(\n quotes.map(async (quoteResponse) => {\n const { quote, trade, approval } = quoteResponse;\n const chainId = numberToHex(quote.srcChainId);\n\n const getTxParams = (txData: TxData) => ({\n from: txData.from,\n to: txData.to,\n value: txData.value,\n data: txData.data,\n gasLimit: txData.gasLimit?.toString(),\n });\n const approvalL1GasFees = approval\n ? await this.#getLayer1GasFee({\n transactionParams: getTxParams(approval),\n chainId,\n })\n : '0x0';\n const tradeL1GasFees = await this.#getLayer1GasFee({\n transactionParams: getTxParams(trade),\n chainId,\n });\n\n if (approvalL1GasFees === undefined || tradeL1GasFees === undefined) {\n return undefined;\n }\n\n return {\n ...quoteResponse,\n l1GasFeesInHexWei: sumHexes(approvalL1GasFees, tradeL1GasFees),\n };\n }),\n );\n\n const quotesWithL1GasFees = (await l1GasFeePromises).reduce<\n (QuoteResponse & L1GasFees)[]\n >((acc, result) => {\n if (result.status === 'fulfilled' && result.value) {\n acc.push(result.value);\n } else if (result.status === 'rejected') {\n console.error('Error calculating L1 gas fees for quote', result.reason);\n }\n return acc;\n }, []);\n\n return quotesWithL1GasFees;\n };\n\n readonly #setMinimumBalanceForRentExemptionInLamports = (\n srcChainId: GenericQuoteRequest['srcChainId'],\n ): Promise<void> | undefined => {\n const selectedAccount = this.#getMultichainSelectedAccount();\n\n return isSolanaChainId(srcChainId) && selectedAccount?.metadata?.snap?.id\n ? this.messagingSystem\n .call(\n 'SnapController:handleRequest',\n getMinimumBalanceForRentExemptionRequest(\n selectedAccount.metadata.snap?.id,\n ),\n ) // eslint-disable-next-line promise/always-return\n .then((result) => {\n this.update((state) => {\n state.minimumBalanceForRentExemptionInLamports = String(result);\n });\n })\n .catch((error) => {\n console.error(\n 'Error setting minimum balance for rent exemption',\n error,\n );\n this.update((state) => {\n state.minimumBalanceForRentExemptionInLamports =\n DEFAULT_BRIDGE_CONTROLLER_STATE.minimumBalanceForRentExemptionInLamports;\n });\n })\n : undefined;\n };\n\n readonly #appendSolanaFees = async (\n quotes: QuoteResponse[],\n ): Promise<(QuoteResponse & SolanaFees)[] | undefined> => {\n // Return early if some of the quotes are not for solana\n if (\n quotes.some(({ quote: { srcChainId } }) => !isSolanaChainId(srcChainId))\n ) {\n return undefined;\n }\n\n const solanaFeePromises = Promise.allSettled(\n quotes.map(async (quoteResponse) => {\n const { trade } = quoteResponse;\n const selectedAccount = this.#getMultichainSelectedAccount();\n\n if (selectedAccount?.metadata?.snap?.id && typeof trade === 'string') {\n const { value: fees } = (await this.messagingSystem.call(\n 'SnapController:handleRequest',\n getFeeForTransactionRequest(\n selectedAccount.metadata.snap?.id,\n trade,\n ),\n )) as { value: string };\n\n return {\n ...quoteResponse,\n solanaFeesInLamports: fees,\n };\n }\n return quoteResponse;\n }),\n );\n\n const quotesWithSolanaFees = (await solanaFeePromises).reduce<\n (QuoteResponse & SolanaFees)[]\n >((acc, result) => {\n if (result.status === 'fulfilled' && result.value) {\n acc.push(result.value);\n } else if (result.status === 'rejected') {\n console.error('Error calculating solana fees for quote', result.reason);\n }\n return acc;\n }, []);\n\n return quotesWithSolanaFees;\n };\n\n #getMultichainSelectedAccount() {\n return this.messagingSystem.call(\n 'AccountsController:getSelectedMultichainAccount',\n );\n }\n\n #getSelectedNetworkClientId() {\n const { selectedNetworkClientId } = this.messagingSystem.call(\n 'NetworkController:getState',\n );\n // console.log('===selectedNetworkClientId', selectedNetworkClientId);\n return selectedNetworkClientId;\n }\n\n #getSelectedNetworkClient() {\n const selectedNetworkClientId = this.#getSelectedNetworkClientId();\n const networkClient = this.messagingSystem.call(\n 'NetworkController:getNetworkClientById',\n selectedNetworkClientId,\n );\n return networkClient;\n }\n\n readonly #getRequestParams = (): Omit<\n RequestParams,\n 'token_symbol_source' | 'token_symbol_destination'\n > => {\n const srcChainIdCaip = formatChainIdToCaip(\n this.state.quoteRequest.srcChainId ||\n this.#getSelectedNetworkClient().configuration.chainId,\n );\n return getRequestParams(this.state.quoteRequest, srcChainIdCaip);\n };\n\n readonly #getRequestMetadata = (): Omit<\n RequestMetadata,\n 'stx_enabled' | 'usd_amount_source' | 'security_warnings'\n > => {\n return {\n slippage_limit: this.state.quoteRequest.slippage,\n swap_type: getSwapTypeFromQuote(this.state.quoteRequest),\n is_hardware_wallet: isHardwareWallet(\n this.#getMultichainSelectedAccount(),\n ),\n custom_slippage: isCustomSlippage(this.state.quoteRequest.slippage),\n };\n };\n\n readonly #getQuoteFetchData = (): Omit<\n QuoteFetchData,\n 'best_quote_provider' | 'price_impact' | 'can_submit'\n > => {\n return {\n quotes_count: this.state.quotes.length,\n quotes_list: this.state.quotes.map(({ quote }) =>\n formatProviderLabel(quote),\n ),\n initial_load_time_all_quotes: this.state.quotesInitialLoadTime ?? 0,\n };\n };\n\n readonly #getEventProperties = <\n T extends\n (typeof UnifiedSwapBridgeEventName)[keyof typeof UnifiedSwapBridgeEventName],\n >(\n eventName: T,\n propertiesFromClient: Pick<RequiredEventContextFromClient, T>[T],\n ): CrossChainSwapsEventProperties<T> => {\n const baseProperties = {\n ...propertiesFromClient,\n action_type: MetricsActionType.SWAPBRIDGE_V1,\n };\n switch (eventName) {\n case UnifiedSwapBridgeEventName.ButtonClicked:\n case UnifiedSwapBridgeEventName.PageViewed:\n return {\n ...this.#getRequestParams(),\n ...baseProperties,\n };\n case UnifiedSwapBridgeEventName.QuotesValidationFailed:\n return {\n ...this.#getRequestParams(),\n refresh_count: this.state.quotesRefreshCount,\n ...baseProperties,\n };\n case UnifiedSwapBridgeEventName.QuotesReceived:\n return {\n ...this.#getRequestParams(),\n ...this.#getRequestMetadata(),\n ...this.#getQuoteFetchData(),\n refresh_count: this.state.quotesRefreshCount,\n ...baseProperties,\n };\n case UnifiedSwapBridgeEventName.QuotesRequested:\n return {\n ...this.#getRequestParams(),\n ...this.#getRequestMetadata(),\n has_sufficient_funds: !this.state.quoteRequest.insufficientBal,\n ...baseProperties,\n };\n case UnifiedSwapBridgeEventName.QuotesError:\n return {\n ...this.#getRequestParams(),\n ...this.#getRequestMetadata(),\n error_message: this.state.quoteFetchError,\n has_sufficient_funds: !this.state.quoteRequest.insufficientBal,\n ...baseProperties,\n };\n case UnifiedSwapBridgeEventName.AllQuotesOpened:\n case UnifiedSwapBridgeEventName.AllQuotesSorted:\n case UnifiedSwapBridgeEventName.QuoteSelected:\n return {\n ...this.#getRequestParams(),\n ...this.#getRequestMetadata(),\n ...this.#getQuoteFetchData(),\n ...baseProperties,\n };\n case UnifiedSwapBridgeEventName.SnapConfirmationViewed:\n return {\n ...baseProperties,\n ...this.#getRequestParams(),\n ...this.#getRequestMetadata(),\n };\n case UnifiedSwapBridgeEventName.Failed: {\n // Populate the properties that the error occurred before the tx was submitted\n return {\n ...baseProperties,\n ...this.#getRequestParams(),\n ...this.#getRequestMetadata(),\n ...this.#getQuoteFetchData(),\n ...propertiesFromClient,\n };\n }\n case UnifiedSwapBridgeEventName.AssetDetailTooltipClicked:\n return baseProperties;\n // These events may be published after the bridge-controller state is reset\n // So the BridgeStatusController populates all the properties\n case UnifiedSwapBridgeEventName.Submitted:\n case UnifiedSwapBridgeEventName.Completed:\n return propertiesFromClient;\n case UnifiedSwapBridgeEventName.InputChanged:\n default:\n return baseProperties;\n }\n };\n\n readonly #trackInputChangedEvents = (\n paramsToUpdate: Partial<GenericQuoteRequest>,\n ) => {\n Object.entries(paramsToUpdate).forEach(([key, value]) => {\n const inputKey = toInputChangedPropertyKey[key as keyof QuoteRequest];\n const inputValue =\n toInputChangedPropertyValue[key as keyof QuoteRequest]?.(\n paramsToUpdate,\n );\n if (\n inputKey &&\n inputValue !== undefined &&\n value !== this.state.quoteRequest[key as keyof GenericQuoteRequest]\n ) {\n this.trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.InputChanged,\n {\n input: inputKey,\n input_value: inputValue,\n },\n );\n }\n });\n };\n\n /**\n * This method tracks cross-chain swaps events\n *\n * @param eventName - The name of the event to track\n * @param propertiesFromClient - Properties that can't be calculated from the event name and need to be provided by the client\n * @example\n * this.trackUnifiedSwapBridgeEvent(UnifiedSwapBridgeEventName.ActionOpened, {\n * location: MetaMetricsSwapsEventSource.MainView,\n * });\n */\n trackUnifiedSwapBridgeEvent = <\n T extends\n (typeof UnifiedSwapBridgeEventName)[keyof typeof UnifiedSwapBridgeEventName],\n >(\n eventName: T,\n propertiesFromClient: Pick<RequiredEventContextFromClient, T>[T],\n ) => {\n try {\n const combinedPropertiesForEvent = this.#getEventProperties<T>(\n eventName,\n propertiesFromClient,\n );\n\n this.#trackMetaMetricsFn(eventName, combinedPropertiesForEvent);\n } catch (error) {\n console.error(\n 'Error tracking cross-chain swaps MetaMetrics event',\n error,\n );\n }\n };\n\n /**\n *\n * @param contractAddress - The address of the ERC20 token contract\n * @param chainId - The hex chain ID of the bridge network\n * @returns The atomic allowance of the ERC20 token contract\n */\n getBridgeERC20Allowance = async (\n contractAddress: string,\n chainId: Hex,\n ): Promise<string> => {\n const provider = this.#getSelectedNetworkClient()?.provider;\n if (!provider) {\n throw new Error('No provider found');\n }\n\n const ethersProvider = new Web3Provider(provider);\n const contract = new Contract(contractAddress, abiERC20, ethersProvider);\n const { address: walletAddress } =\n this.#getMultichainSelectedAccount() ?? {};\n const allowance: BigNumber = await contract.allowance(\n walletAddress,\n METABRIDGE_CHAIN_TO_ADDRESS_MAP[chainId],\n );\n return allowance.toString();\n };\n}\n"]}
1
+ {"version":3,"file":"bridge-controller.mjs","sourceRoot":"","sources":["../src/bridge-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BigNumber } from '@ethersproject/bignumber';\nimport { Contract } from '@ethersproject/contracts';\nimport { Web3Provider } from '@ethersproject/providers';\nimport type { StateMetadata } from '@metamask/base-controller';\nimport type { TraceCallback } from '@metamask/controller-utils';\nimport { abiERC20 } from '@metamask/metamask-eth-abis';\nimport type { NetworkClientId } from '@metamask/network-controller';\nimport { StaticIntervalPollingController } from '@metamask/polling-controller';\nimport type { TransactionController } from '@metamask/transaction-controller';\nimport type { CaipAssetType } from '@metamask/utils';\nimport { numberToHex, type Hex } from '@metamask/utils';\n\nimport {\n type BridgeClientId,\n BRIDGE_CONTROLLER_NAME,\n BRIDGE_PROD_API_BASE_URL,\n DEFAULT_BRIDGE_CONTROLLER_STATE,\n METABRIDGE_CHAIN_TO_ADDRESS_MAP,\n REFRESH_INTERVAL_MS,\n} from './constants/bridge';\nimport { CHAIN_IDS } from './constants/chains';\nimport { TraceName } from './constants/traces';\nimport { selectIsAssetExchangeRateInState } from './selectors';\nimport type { QuoteRequest } from './types';\nimport {\n type L1GasFees,\n type GenericQuoteRequest,\n type SolanaFees,\n type QuoteResponse,\n type TxData,\n type BridgeControllerState,\n type BridgeControllerMessenger,\n type FetchFunction,\n RequestStatus,\n} from './types';\nimport { getAssetIdsForToken, toExchangeRates } from './utils/assets';\nimport { hasSufficientBalance } from './utils/balance';\nimport {\n getDefaultBridgeControllerState,\n isCrossChain,\n isSolanaChainId,\n sumHexes,\n} from './utils/bridge';\nimport {\n formatAddressToCaipReference,\n formatChainIdToCaip,\n formatChainIdToHex,\n} from './utils/caip-formatters';\nimport { getBridgeFeatureFlags } from './utils/feature-flags';\nimport { fetchAssetPrices, fetchBridgeQuotes } from './utils/fetch';\nimport {\n AbortReason,\n MetricsActionType,\n UnifiedSwapBridgeEventName,\n} from './utils/metrics/constants';\nimport {\n formatProviderLabel,\n getRequestParams,\n getSwapTypeFromQuote,\n isCustomSlippage,\n isHardwareWallet,\n toInputChangedPropertyKey,\n toInputChangedPropertyValue,\n} from './utils/metrics/properties';\nimport type {\n QuoteFetchData,\n RequestMetadata,\n RequestParams,\n RequiredEventContextFromClient,\n} from './utils/metrics/types';\nimport { type CrossChainSwapsEventProperties } from './utils/metrics/types';\nimport { isValidQuoteRequest } from './utils/quote';\nimport {\n getFeeForTransactionRequest,\n getMinimumBalanceForRentExemptionRequest,\n} from './utils/snaps';\nimport { FeatureId } from './utils/validators';\n\nconst metadata: StateMetadata<BridgeControllerState> = {\n quoteRequest: {\n includeInStateLogs: true,\n persist: false,\n anonymous: false,\n usedInUi: true,\n },\n quotes: {\n includeInStateLogs: true,\n persist: false,\n anonymous: false,\n usedInUi: true,\n },\n quotesInitialLoadTime: {\n includeInStateLogs: true,\n persist: false,\n anonymous: false,\n usedInUi: true,\n },\n quotesLastFetched: {\n includeInStateLogs: true,\n persist: false,\n anonymous: false,\n usedInUi: true,\n },\n quotesLoadingStatus: {\n includeInStateLogs: true,\n persist: false,\n anonymous: false,\n usedInUi: true,\n },\n quoteFetchError: {\n includeInStateLogs: true,\n persist: false,\n anonymous: false,\n usedInUi: true,\n },\n quotesRefreshCount: {\n includeInStateLogs: true,\n persist: false,\n anonymous: false,\n usedInUi: true,\n },\n assetExchangeRates: {\n includeInStateLogs: true,\n persist: false,\n anonymous: false,\n usedInUi: true,\n },\n minimumBalanceForRentExemptionInLamports: {\n includeInStateLogs: true,\n persist: false,\n anonymous: false,\n usedInUi: true,\n },\n};\n\n/**\n * The input to start polling for the {@link BridgeController}\n *\n * @param networkClientId - The network client ID of the selected network\n * @param updatedQuoteRequest - The updated quote request\n * @param context - The context contains properties that can't be populated by the\n * controller and need to be provided by the client for analytics\n */\ntype BridgePollingInput = {\n networkClientId: NetworkClientId;\n updatedQuoteRequest: GenericQuoteRequest;\n context: Pick<\n RequiredEventContextFromClient,\n UnifiedSwapBridgeEventName.QuotesError\n >[UnifiedSwapBridgeEventName.QuotesError] &\n Pick<\n RequiredEventContextFromClient,\n UnifiedSwapBridgeEventName.QuotesRequested\n >[UnifiedSwapBridgeEventName.QuotesRequested];\n};\n\nexport class BridgeController extends StaticIntervalPollingController<BridgePollingInput>()<\n typeof BRIDGE_CONTROLLER_NAME,\n BridgeControllerState,\n BridgeControllerMessenger\n> {\n #abortController: AbortController | undefined;\n\n #quotesFirstFetched: number | undefined;\n\n readonly #clientId: string;\n\n readonly #getLayer1GasFee: typeof TransactionController.prototype.getLayer1GasFee;\n\n readonly #fetchFn: FetchFunction;\n\n readonly #trackMetaMetricsFn: <\n T extends\n (typeof UnifiedSwapBridgeEventName)[keyof typeof UnifiedSwapBridgeEventName],\n >(\n eventName: T,\n properties: CrossChainSwapsEventProperties<T>,\n ) => void;\n\n readonly #trace: TraceCallback;\n\n readonly #config: {\n customBridgeApiBaseUrl?: string;\n };\n\n constructor({\n messenger,\n state,\n clientId,\n getLayer1GasFee,\n fetchFn,\n config,\n trackMetaMetricsFn,\n traceFn,\n }: {\n messenger: BridgeControllerMessenger;\n state?: Partial<BridgeControllerState>;\n clientId: BridgeClientId;\n getLayer1GasFee: typeof TransactionController.prototype.getLayer1GasFee;\n fetchFn: FetchFunction;\n config?: {\n customBridgeApiBaseUrl?: string;\n };\n trackMetaMetricsFn: <\n T extends\n (typeof UnifiedSwapBridgeEventName)[keyof typeof UnifiedSwapBridgeEventName],\n >(\n eventName: T,\n properties: CrossChainSwapsEventProperties<T>,\n ) => void;\n traceFn?: TraceCallback;\n }) {\n super({\n name: BRIDGE_CONTROLLER_NAME,\n metadata,\n messenger,\n state: {\n ...getDefaultBridgeControllerState(),\n ...state,\n },\n });\n\n this.setIntervalLength(REFRESH_INTERVAL_MS);\n\n this.#abortController = new AbortController();\n this.#getLayer1GasFee = getLayer1GasFee;\n this.#clientId = clientId;\n this.#fetchFn = fetchFn;\n this.#trackMetaMetricsFn = trackMetaMetricsFn;\n this.#config = config ?? {};\n this.#trace = traceFn ?? (((_request, fn) => fn?.()) as TraceCallback);\n\n // Register action handlers\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_CONTROLLER_NAME}:setChainIntervalLength`,\n this.setChainIntervalLength.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_CONTROLLER_NAME}:updateBridgeQuoteRequestParams`,\n this.updateBridgeQuoteRequestParams.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_CONTROLLER_NAME}:resetState`,\n this.resetState.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_CONTROLLER_NAME}:getBridgeERC20Allowance`,\n this.getBridgeERC20Allowance.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_CONTROLLER_NAME}:trackUnifiedSwapBridgeEvent`,\n this.trackUnifiedSwapBridgeEvent.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_CONTROLLER_NAME}:stopPollingForQuotes`,\n this.stopPollingForQuotes.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_CONTROLLER_NAME}:fetchQuotes`,\n this.fetchQuotes.bind(this),\n );\n }\n\n _executePoll = async (pollingInput: BridgePollingInput) => {\n await this.#fetchBridgeQuotes(pollingInput);\n };\n\n updateBridgeQuoteRequestParams = async (\n paramsToUpdate: Partial<GenericQuoteRequest>,\n context: BridgePollingInput['context'],\n ) => {\n this.stopAllPolling();\n this.#abortController?.abort(AbortReason.QuoteRequestUpdated);\n\n this.#trackInputChangedEvents(paramsToUpdate);\n\n const updatedQuoteRequest = {\n ...DEFAULT_BRIDGE_CONTROLLER_STATE.quoteRequest,\n ...paramsToUpdate,\n };\n\n this.update((state) => {\n state.quoteRequest = updatedQuoteRequest;\n state.quotes = DEFAULT_BRIDGE_CONTROLLER_STATE.quotes;\n state.quotesLastFetched =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quotesLastFetched;\n state.quotesLoadingStatus =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quotesLoadingStatus;\n state.quoteFetchError = DEFAULT_BRIDGE_CONTROLLER_STATE.quoteFetchError;\n state.quotesRefreshCount =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quotesRefreshCount;\n state.quotesInitialLoadTime =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quotesInitialLoadTime;\n // Reset required minimum balance if the source chain is not Solana\n if (\n updatedQuoteRequest.srcChainId &&\n !isSolanaChainId(updatedQuoteRequest.srcChainId)\n ) {\n state.minimumBalanceForRentExemptionInLamports =\n DEFAULT_BRIDGE_CONTROLLER_STATE.minimumBalanceForRentExemptionInLamports;\n }\n });\n\n await this.#fetchAssetExchangeRates(updatedQuoteRequest).catch((error) =>\n console.warn('Failed to fetch asset exchange rates', error),\n );\n\n if (isValidQuoteRequest(updatedQuoteRequest)) {\n this.#quotesFirstFetched = Date.now();\n const providerConfig = this.#getSelectedNetworkClient()?.configuration;\n\n let insufficientBal: boolean | undefined;\n if (isSolanaChainId(updatedQuoteRequest.srcChainId)) {\n // If the source chain is not an EVM network, use value from params\n insufficientBal = paramsToUpdate.insufficientBal;\n } else if (providerConfig?.rpcUrl?.includes('tenderly')) {\n // If the rpcUrl is a tenderly fork (e2e tests), set insufficientBal=true\n // The bridge-api filters out quotes if the balance on mainnet is insufficient so this override allows quotes to always be returned\n insufficientBal = true;\n } else {\n // Otherwise query the src token balance from the RPC provider\n insufficientBal =\n paramsToUpdate.insufficientBal ??\n !(await this.#hasSufficientBalance(updatedQuoteRequest));\n }\n\n const networkClientId = this.#getSelectedNetworkClientId();\n // Set refresh rate based on the source chain before starting polling\n this.setChainIntervalLength();\n this.startPolling({\n networkClientId,\n updatedQuoteRequest: {\n ...updatedQuoteRequest,\n insufficientBal,\n },\n context,\n });\n }\n };\n\n /**\n * Fetches quotes for specified request without updating the controller state\n * This method does not start polling for quotes and does not emit UnifiedSwapBridge events\n *\n * @param quoteRequest - The parameters for quote requests to fetch\n * @param abortSignal - The abort signal to cancel all the requests\n * @param featureId - The feature ID that maps to quoteParam overrides from LD\n * @returns A list of validated quotes\n */\n fetchQuotes = async (\n quoteRequest: GenericQuoteRequest,\n abortSignal: AbortSignal | null = null,\n featureId: FeatureId | null = null,\n ): Promise<QuoteResponse[]> => {\n const bridgeFeatureFlags = getBridgeFeatureFlags(this.messagingSystem);\n // If featureId is specified, retrieve the quoteRequestOverrides for that featureId\n const quoteRequestOverrides = featureId\n ? bridgeFeatureFlags.quoteRequestOverrides?.[featureId]\n : undefined;\n\n // If quoteRequestOverrides is specified, merge it with the quoteRequest\n const { quotes: baseQuotes, validationFailures } = await fetchBridgeQuotes(\n quoteRequestOverrides\n ? { ...quoteRequest, ...quoteRequestOverrides }\n : quoteRequest,\n abortSignal,\n this.#clientId,\n this.#fetchFn,\n this.#config.customBridgeApiBaseUrl ?? BRIDGE_PROD_API_BASE_URL,\n );\n\n this.#trackResponseValidationFailures(validationFailures);\n\n const quotesWithL1GasFees = await this.#appendL1GasFees(baseQuotes);\n const quotesWithSolanaFees = await this.#appendSolanaFees(baseQuotes);\n const quotesWithFees =\n quotesWithL1GasFees ?? quotesWithSolanaFees ?? baseQuotes;\n // Sort perps quotes by increasing estimated processing time (fastest first)\n if (featureId === FeatureId.PERPS) {\n return quotesWithFees.sort((a, b) => {\n return (\n a.estimatedProcessingTimeInSeconds -\n b.estimatedProcessingTimeInSeconds\n );\n });\n }\n return quotesWithFees;\n };\n\n readonly #trackResponseValidationFailures = (\n validationFailures: string[],\n ) => {\n if (validationFailures.length === 0) {\n return;\n }\n this.trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.QuotesValidationFailed,\n {\n failures: validationFailures,\n },\n );\n };\n\n readonly #getExchangeRateSources = () => {\n return {\n ...this.messagingSystem.call('MultichainAssetsRatesController:getState'),\n ...this.messagingSystem.call('CurrencyRateController:getState'),\n ...this.messagingSystem.call('TokenRatesController:getState'),\n ...this.state,\n };\n };\n\n /**\n * Fetches the exchange rates for the assets in the quote request if they are not already in the state\n * In addition to the selected tokens, this also fetches the native asset for the source and destination chains\n *\n * @param quoteRequest - The quote request\n * @param quoteRequest.srcChainId - The source chain ID\n * @param quoteRequest.srcTokenAddress - The source token address\n * @param quoteRequest.destChainId - The destination chain ID\n * @param quoteRequest.destTokenAddress - The destination token address\n */\n readonly #fetchAssetExchangeRates = async ({\n srcChainId,\n srcTokenAddress,\n destChainId,\n destTokenAddress,\n }: Partial<GenericQuoteRequest>) => {\n const assetIds: Set<CaipAssetType> = new Set([]);\n const exchangeRateSources = this.#getExchangeRateSources();\n if (\n srcTokenAddress &&\n srcChainId &&\n !selectIsAssetExchangeRateInState(\n exchangeRateSources,\n srcChainId,\n srcTokenAddress,\n )\n ) {\n getAssetIdsForToken(srcTokenAddress, srcChainId).forEach((assetId) =>\n assetIds.add(assetId),\n );\n }\n if (\n destTokenAddress &&\n destChainId &&\n !selectIsAssetExchangeRateInState(\n exchangeRateSources,\n destChainId,\n destTokenAddress,\n )\n ) {\n getAssetIdsForToken(destTokenAddress, destChainId).forEach((assetId) =>\n assetIds.add(assetId),\n );\n }\n\n const currency = this.messagingSystem.call(\n 'CurrencyRateController:getState',\n ).currentCurrency;\n\n if (assetIds.size === 0) {\n return;\n }\n\n const pricesByAssetId = await fetchAssetPrices({\n assetIds,\n currencies: new Set([currency]),\n clientId: this.#clientId,\n fetchFn: this.#fetchFn,\n });\n const exchangeRates = toExchangeRates(currency, pricesByAssetId);\n this.update((state) => {\n state.assetExchangeRates = {\n ...state.assetExchangeRates,\n ...exchangeRates,\n };\n });\n };\n\n readonly #hasSufficientBalance = async (\n quoteRequest: GenericQuoteRequest,\n ) => {\n const walletAddress = this.#getMultichainSelectedAccount()?.address;\n const srcChainIdInHex = formatChainIdToHex(quoteRequest.srcChainId);\n const provider = this.#getSelectedNetworkClient()?.provider;\n const normalizedSrcTokenAddress = formatAddressToCaipReference(\n quoteRequest.srcTokenAddress,\n );\n\n return (\n provider &&\n walletAddress &&\n normalizedSrcTokenAddress &&\n quoteRequest.srcTokenAmount &&\n srcChainIdInHex &&\n (await hasSufficientBalance(\n provider,\n walletAddress,\n normalizedSrcTokenAddress,\n quoteRequest.srcTokenAmount,\n srcChainIdInHex,\n ))\n );\n };\n\n stopPollingForQuotes = (reason?: AbortReason) => {\n this.stopAllPolling();\n this.#abortController?.abort(reason);\n };\n\n resetState = () => {\n this.stopPollingForQuotes(AbortReason.ResetState);\n\n this.update((state) => {\n // Cannot do direct assignment to state, i.e. state = {... }, need to manually assign each field\n state.quoteRequest = DEFAULT_BRIDGE_CONTROLLER_STATE.quoteRequest;\n state.quotesInitialLoadTime =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quotesInitialLoadTime;\n state.quotes = DEFAULT_BRIDGE_CONTROLLER_STATE.quotes;\n state.quotesLastFetched =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quotesLastFetched;\n state.quotesLoadingStatus =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quotesLoadingStatus;\n state.quoteFetchError = DEFAULT_BRIDGE_CONTROLLER_STATE.quoteFetchError;\n state.quotesRefreshCount =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quotesRefreshCount;\n state.assetExchangeRates =\n DEFAULT_BRIDGE_CONTROLLER_STATE.assetExchangeRates;\n state.minimumBalanceForRentExemptionInLamports =\n DEFAULT_BRIDGE_CONTROLLER_STATE.minimumBalanceForRentExemptionInLamports;\n });\n };\n\n /**\n * Sets the interval length based on the source chain\n */\n setChainIntervalLength = () => {\n const { state } = this;\n const { srcChainId } = state.quoteRequest;\n const bridgeFeatureFlags = getBridgeFeatureFlags(this.messagingSystem);\n\n const refreshRateOverride = srcChainId\n ? bridgeFeatureFlags.chains[formatChainIdToCaip(srcChainId)]?.refreshRate\n : undefined;\n const defaultRefreshRate = bridgeFeatureFlags.refreshRate;\n this.setIntervalLength(refreshRateOverride ?? defaultRefreshRate);\n };\n\n readonly #fetchBridgeQuotes = async ({\n networkClientId: _networkClientId,\n updatedQuoteRequest,\n context,\n }: BridgePollingInput) => {\n this.#abortController?.abort('New quote request');\n this.#abortController = new AbortController();\n\n this.trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.QuotesRequested,\n context,\n );\n this.update((state) => {\n state.quotesLoadingStatus = RequestStatus.LOADING;\n state.quoteRequest = updatedQuoteRequest;\n state.quoteFetchError = DEFAULT_BRIDGE_CONTROLLER_STATE.quoteFetchError;\n });\n\n try {\n await this.#trace(\n {\n name: isCrossChain(\n updatedQuoteRequest.srcChainId,\n updatedQuoteRequest.destChainId,\n )\n ? TraceName.BridgeQuotesFetched\n : TraceName.SwapQuotesFetched,\n data: {\n srcChainId: formatChainIdToCaip(updatedQuoteRequest.srcChainId),\n destChainId: formatChainIdToCaip(updatedQuoteRequest.destChainId),\n },\n },\n async () => {\n // This call is not awaited to prevent blocking quote fetching if the snap takes too long to respond\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.#setMinimumBalanceForRentExemptionInLamports(\n updatedQuoteRequest.srcChainId,\n );\n const quotes = await this.fetchQuotes(\n updatedQuoteRequest,\n // AbortController is always defined by this line, because we assign it a few lines above,\n // not sure why Jest thinks it's not\n // Linters accurately say that it's defined\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.#abortController!.signal as AbortSignal,\n );\n\n this.update((state) => {\n state.quotes = quotes;\n state.quotesLoadingStatus = RequestStatus.FETCHED;\n });\n },\n );\n } catch (error) {\n const isAbortError = (error as Error).name === 'AbortError';\n if (\n isAbortError ||\n [\n AbortReason.ResetState,\n AbortReason.NewQuoteRequest,\n AbortReason.QuoteRequestUpdated,\n ].includes(error as AbortReason)\n ) {\n // Exit the function early to prevent other state updates\n return;\n }\n\n this.update((state) => {\n state.quoteFetchError =\n error instanceof Error ? error.message : (error?.toString() ?? null);\n state.quotesLoadingStatus = RequestStatus.ERROR;\n state.quotes = DEFAULT_BRIDGE_CONTROLLER_STATE.quotes;\n });\n this.trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.QuotesError,\n context,\n );\n console.log('Failed to fetch bridge quotes', error);\n }\n const bridgeFeatureFlags = getBridgeFeatureFlags(this.messagingSystem);\n const { maxRefreshCount } = bridgeFeatureFlags;\n\n // Stop polling if the maximum number of refreshes has been reached\n if (\n updatedQuoteRequest.insufficientBal ||\n (!updatedQuoteRequest.insufficientBal &&\n this.state.quotesRefreshCount >= maxRefreshCount)\n ) {\n this.stopAllPolling();\n }\n\n // Update quote fetching stats\n const quotesLastFetched = Date.now();\n this.update((state) => {\n state.quotesInitialLoadTime =\n state.quotesRefreshCount === 0 && this.#quotesFirstFetched\n ? quotesLastFetched - this.#quotesFirstFetched\n : this.state.quotesInitialLoadTime;\n state.quotesLastFetched = quotesLastFetched;\n state.quotesRefreshCount += 1;\n });\n };\n\n readonly #appendL1GasFees = async (\n quotes: QuoteResponse[],\n ): Promise<(QuoteResponse & L1GasFees)[] | undefined> => {\n // Indicates whether some of the quotes are not for optimism or base\n const hasInvalidQuotes = quotes.some(({ quote }) => {\n const chainId = formatChainIdToCaip(quote.srcChainId);\n return ![CHAIN_IDS.OPTIMISM, CHAIN_IDS.BASE]\n .map(formatChainIdToCaip)\n .includes(chainId);\n });\n\n // Only append L1 gas fees if all quotes are for either optimism or base\n if (hasInvalidQuotes) {\n return undefined;\n }\n\n const l1GasFeePromises = Promise.allSettled(\n quotes.map(async (quoteResponse) => {\n const { quote, trade, approval } = quoteResponse;\n const chainId = numberToHex(quote.srcChainId);\n\n const getTxParams = (txData: TxData) => ({\n from: txData.from,\n to: txData.to,\n value: txData.value,\n data: txData.data,\n gasLimit: txData.gasLimit?.toString(),\n });\n const approvalL1GasFees = approval\n ? await this.#getLayer1GasFee({\n transactionParams: getTxParams(approval),\n chainId,\n })\n : '0x0';\n const tradeL1GasFees = await this.#getLayer1GasFee({\n transactionParams: getTxParams(trade),\n chainId,\n });\n\n if (approvalL1GasFees === undefined || tradeL1GasFees === undefined) {\n return undefined;\n }\n\n return {\n ...quoteResponse,\n l1GasFeesInHexWei: sumHexes(approvalL1GasFees, tradeL1GasFees),\n };\n }),\n );\n\n const quotesWithL1GasFees = (await l1GasFeePromises).reduce<\n (QuoteResponse & L1GasFees)[]\n >((acc, result) => {\n if (result.status === 'fulfilled' && result.value) {\n acc.push(result.value);\n } else if (result.status === 'rejected') {\n console.error('Error calculating L1 gas fees for quote', result.reason);\n }\n return acc;\n }, []);\n\n return quotesWithL1GasFees;\n };\n\n readonly #setMinimumBalanceForRentExemptionInLamports = (\n srcChainId: GenericQuoteRequest['srcChainId'],\n ): Promise<void> | undefined => {\n const selectedAccount = this.#getMultichainSelectedAccount();\n\n return isSolanaChainId(srcChainId) && selectedAccount?.metadata?.snap?.id\n ? this.messagingSystem\n .call(\n 'SnapController:handleRequest',\n getMinimumBalanceForRentExemptionRequest(\n selectedAccount.metadata.snap?.id,\n ),\n ) // eslint-disable-next-line promise/always-return\n .then((result) => {\n this.update((state) => {\n state.minimumBalanceForRentExemptionInLamports = String(result);\n });\n })\n .catch((error) => {\n console.error(\n 'Error setting minimum balance for rent exemption',\n error,\n );\n this.update((state) => {\n state.minimumBalanceForRentExemptionInLamports =\n DEFAULT_BRIDGE_CONTROLLER_STATE.minimumBalanceForRentExemptionInLamports;\n });\n })\n : undefined;\n };\n\n readonly #appendSolanaFees = async (\n quotes: QuoteResponse[],\n ): Promise<(QuoteResponse & SolanaFees)[] | undefined> => {\n // Return early if some of the quotes are not for solana\n if (\n quotes.some(({ quote: { srcChainId } }) => !isSolanaChainId(srcChainId))\n ) {\n return undefined;\n }\n\n const solanaFeePromises = Promise.allSettled(\n quotes.map(async (quoteResponse) => {\n const { trade } = quoteResponse;\n const selectedAccount = this.#getMultichainSelectedAccount();\n\n if (selectedAccount?.metadata?.snap?.id && typeof trade === 'string') {\n const { value: fees } = (await this.messagingSystem.call(\n 'SnapController:handleRequest',\n getFeeForTransactionRequest(\n selectedAccount.metadata.snap?.id,\n trade,\n ),\n )) as { value: string };\n\n return {\n ...quoteResponse,\n solanaFeesInLamports: fees,\n };\n }\n return quoteResponse;\n }),\n );\n\n const quotesWithSolanaFees = (await solanaFeePromises).reduce<\n (QuoteResponse & SolanaFees)[]\n >((acc, result) => {\n if (result.status === 'fulfilled' && result.value) {\n acc.push(result.value);\n } else if (result.status === 'rejected') {\n console.error('Error calculating solana fees for quote', result.reason);\n }\n return acc;\n }, []);\n\n return quotesWithSolanaFees;\n };\n\n #getMultichainSelectedAccount() {\n return this.messagingSystem.call(\n 'AccountsController:getSelectedMultichainAccount',\n );\n }\n\n #getSelectedNetworkClientId() {\n const { selectedNetworkClientId } = this.messagingSystem.call(\n 'NetworkController:getState',\n );\n // console.log('===selectedNetworkClientId', selectedNetworkClientId);\n return selectedNetworkClientId;\n }\n\n #getSelectedNetworkClient() {\n const selectedNetworkClientId = this.#getSelectedNetworkClientId();\n const networkClient = this.messagingSystem.call(\n 'NetworkController:getNetworkClientById',\n selectedNetworkClientId,\n );\n return networkClient;\n }\n\n readonly #getRequestParams = (): Omit<\n RequestParams,\n 'token_symbol_source' | 'token_symbol_destination'\n > => {\n const srcChainIdCaip = formatChainIdToCaip(\n this.state.quoteRequest.srcChainId ||\n this.#getSelectedNetworkClient().configuration.chainId,\n );\n return getRequestParams(this.state.quoteRequest, srcChainIdCaip);\n };\n\n readonly #getRequestMetadata = (): Omit<\n RequestMetadata,\n 'stx_enabled' | 'usd_amount_source' | 'security_warnings'\n > => {\n return {\n slippage_limit: this.state.quoteRequest.slippage,\n swap_type: getSwapTypeFromQuote(this.state.quoteRequest),\n is_hardware_wallet: isHardwareWallet(\n this.#getMultichainSelectedAccount(),\n ),\n custom_slippage: isCustomSlippage(this.state.quoteRequest.slippage),\n };\n };\n\n readonly #getQuoteFetchData = (): Omit<\n QuoteFetchData,\n 'best_quote_provider' | 'price_impact' | 'can_submit'\n > => {\n return {\n quotes_count: this.state.quotes.length,\n quotes_list: this.state.quotes.map(({ quote }) =>\n formatProviderLabel(quote),\n ),\n initial_load_time_all_quotes: this.state.quotesInitialLoadTime ?? 0,\n };\n };\n\n readonly #getEventProperties = <\n T extends\n (typeof UnifiedSwapBridgeEventName)[keyof typeof UnifiedSwapBridgeEventName],\n >(\n eventName: T,\n propertiesFromClient: Pick<RequiredEventContextFromClient, T>[T],\n ): CrossChainSwapsEventProperties<T> => {\n const baseProperties = {\n ...propertiesFromClient,\n action_type: MetricsActionType.SWAPBRIDGE_V1,\n };\n switch (eventName) {\n case UnifiedSwapBridgeEventName.ButtonClicked:\n case UnifiedSwapBridgeEventName.PageViewed:\n return {\n ...this.#getRequestParams(),\n ...baseProperties,\n };\n case UnifiedSwapBridgeEventName.QuotesValidationFailed:\n return {\n ...this.#getRequestParams(),\n refresh_count: this.state.quotesRefreshCount,\n ...baseProperties,\n };\n case UnifiedSwapBridgeEventName.QuotesReceived:\n return {\n ...this.#getRequestParams(),\n ...this.#getRequestMetadata(),\n ...this.#getQuoteFetchData(),\n refresh_count: this.state.quotesRefreshCount,\n ...baseProperties,\n };\n case UnifiedSwapBridgeEventName.QuotesRequested:\n return {\n ...this.#getRequestParams(),\n ...this.#getRequestMetadata(),\n has_sufficient_funds: !this.state.quoteRequest.insufficientBal,\n ...baseProperties,\n };\n case UnifiedSwapBridgeEventName.QuotesError:\n return {\n ...this.#getRequestParams(),\n ...this.#getRequestMetadata(),\n error_message: this.state.quoteFetchError,\n has_sufficient_funds: !this.state.quoteRequest.insufficientBal,\n ...baseProperties,\n };\n case UnifiedSwapBridgeEventName.AllQuotesOpened:\n case UnifiedSwapBridgeEventName.AllQuotesSorted:\n case UnifiedSwapBridgeEventName.QuoteSelected:\n return {\n ...this.#getRequestParams(),\n ...this.#getRequestMetadata(),\n ...this.#getQuoteFetchData(),\n ...baseProperties,\n };\n case UnifiedSwapBridgeEventName.SnapConfirmationViewed:\n return {\n ...baseProperties,\n ...this.#getRequestParams(),\n ...this.#getRequestMetadata(),\n };\n case UnifiedSwapBridgeEventName.Failed: {\n // Populate the properties that the error occurred before the tx was submitted\n return {\n ...baseProperties,\n ...this.#getRequestParams(),\n ...this.#getRequestMetadata(),\n ...this.#getQuoteFetchData(),\n ...propertiesFromClient,\n };\n }\n case UnifiedSwapBridgeEventName.AssetDetailTooltipClicked:\n return baseProperties;\n // These events may be published after the bridge-controller state is reset\n // So the BridgeStatusController populates all the properties\n case UnifiedSwapBridgeEventName.Submitted:\n case UnifiedSwapBridgeEventName.Completed:\n return propertiesFromClient;\n case UnifiedSwapBridgeEventName.InputChanged:\n default:\n return baseProperties;\n }\n };\n\n readonly #trackInputChangedEvents = (\n paramsToUpdate: Partial<GenericQuoteRequest>,\n ) => {\n Object.entries(paramsToUpdate).forEach(([key, value]) => {\n const inputKey = toInputChangedPropertyKey[key as keyof QuoteRequest];\n const inputValue =\n toInputChangedPropertyValue[key as keyof QuoteRequest]?.(\n paramsToUpdate,\n );\n if (\n inputKey &&\n inputValue !== undefined &&\n value !== this.state.quoteRequest[key as keyof GenericQuoteRequest]\n ) {\n this.trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.InputChanged,\n {\n input: inputKey,\n input_value: inputValue,\n },\n );\n }\n });\n };\n\n /**\n * This method tracks cross-chain swaps events\n *\n * @param eventName - The name of the event to track\n * @param propertiesFromClient - Properties that can't be calculated from the event name and need to be provided by the client\n * @example\n * this.trackUnifiedSwapBridgeEvent(UnifiedSwapBridgeEventName.ActionOpened, {\n * location: MetaMetricsSwapsEventSource.MainView,\n * });\n */\n trackUnifiedSwapBridgeEvent = <\n T extends\n (typeof UnifiedSwapBridgeEventName)[keyof typeof UnifiedSwapBridgeEventName],\n >(\n eventName: T,\n propertiesFromClient: Pick<RequiredEventContextFromClient, T>[T],\n ) => {\n try {\n const combinedPropertiesForEvent = this.#getEventProperties<T>(\n eventName,\n propertiesFromClient,\n );\n\n this.#trackMetaMetricsFn(eventName, combinedPropertiesForEvent);\n } catch (error) {\n console.error(\n 'Error tracking cross-chain swaps MetaMetrics event',\n error,\n );\n }\n };\n\n /**\n *\n * @param contractAddress - The address of the ERC20 token contract\n * @param chainId - The hex chain ID of the bridge network\n * @returns The atomic allowance of the ERC20 token contract\n */\n getBridgeERC20Allowance = async (\n contractAddress: string,\n chainId: Hex,\n ): Promise<string> => {\n const provider = this.#getSelectedNetworkClient()?.provider;\n if (!provider) {\n throw new Error('No provider found');\n }\n\n const ethersProvider = new Web3Provider(provider);\n const contract = new Contract(contractAddress, abiERC20, ethersProvider);\n const { address: walletAddress } =\n this.#getMultichainSelectedAccount() ?? {};\n const allowance: BigNumber = await contract.allowance(\n walletAddress,\n METABRIDGE_CHAIN_TO_ADDRESS_MAP[chainId],\n );\n return allowance.toString();\n };\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.METABRIDGE_CHAIN_TO_ADDRESS_MAP = exports.DEFAULT_BRIDGE_CONTROLLER_STATE = exports.DEFAULT_FEATURE_FLAG_CONFIG = exports.BRIDGE_CONTROLLER_NAME = exports.DEFAULT_MAX_REFRESH_COUNT = exports.REFRESH_INTERVAL_MS = exports.BRIDGE_MM_FEE_RATE = exports.BRIDGE_DEFAULT_SLIPPAGE = exports.BRIDGE_PREFERRED_GAS_ESTIMATE = exports.BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE = exports.BRIDGE_QUOTE_MAX_ETA_SECONDS = exports.METABRIDGE_ETHEREUM_ADDRESS = exports.ETH_USDT_ADDRESS = exports.BridgeClientId = exports.BRIDGE_PROD_API_BASE_URL = exports.BRIDGE_DEV_API_BASE_URL = exports.ALLOWED_BRIDGE_CHAIN_IDS = void 0;
3
+ exports.METABRIDGE_CHAIN_TO_ADDRESS_MAP = exports.DEFAULT_BRIDGE_CONTROLLER_STATE = exports.DEFAULT_FEATURE_FLAG_CONFIG = exports.BRIDGE_CONTROLLER_NAME = exports.DEFAULT_MAX_REFRESH_COUNT = exports.REFRESH_INTERVAL_MS = exports.BRIDGE_MM_FEE_RATE = exports.BRIDGE_PREFERRED_GAS_ESTIMATE = exports.BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE = exports.BRIDGE_QUOTE_MAX_ETA_SECONDS = exports.METABRIDGE_ETHEREUM_ADDRESS = exports.ETH_USDT_ADDRESS = exports.BridgeClientId = exports.BRIDGE_PROD_API_BASE_URL = exports.BRIDGE_DEV_API_BASE_URL = exports.ALLOWED_BRIDGE_CHAIN_IDS = void 0;
4
4
  const constants_1 = require("@ethersproject/constants");
5
5
  const keyring_api_1 = require("@metamask/keyring-api");
6
6
  const chains_1 = require("./chains.cjs");
@@ -30,7 +30,6 @@ exports.METABRIDGE_ETHEREUM_ADDRESS = '0x0439e60F02a8900a951603950d8D4527f400C3f
30
30
  exports.BRIDGE_QUOTE_MAX_ETA_SECONDS = 60 * 60; // 1 hour
31
31
  exports.BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE = 0.5; // if a quote returns in x times less return than the best quote, ignore it
32
32
  exports.BRIDGE_PREFERRED_GAS_ESTIMATE = 'medium';
33
- exports.BRIDGE_DEFAULT_SLIPPAGE = 0.5;
34
33
  exports.BRIDGE_MM_FEE_RATE = 0.875;
35
34
  exports.REFRESH_INTERVAL_MS = 30 * 1000;
36
35
  exports.DEFAULT_MAX_REFRESH_COUNT = 5;
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.cjs","sourceRoot":"","sources":["../../src/constants/bridge.ts"],"names":[],"mappings":";;;AAAA,wDAAuD;AACvD,uDAA2D;AAG3D,yCAAqC;AAGxB,QAAA,wBAAwB,GAAG;IACtC,kBAAS,CAAC,OAAO;IACjB,kBAAS,CAAC,GAAG;IACb,kBAAS,CAAC,OAAO;IACjB,kBAAS,CAAC,UAAU;IACpB,kBAAS,CAAC,SAAS;IACnB,kBAAS,CAAC,QAAQ;IAClB,kBAAS,CAAC,QAAQ;IAClB,kBAAS,CAAC,aAAa;IACvB,kBAAS,CAAC,IAAI;IACd,kBAAS,CAAC,GAAG;IACb,sBAAQ,CAAC,OAAO;IAChB,sBAAQ,CAAC,OAAO;CACR,CAAC;AAIE,QAAA,uBAAuB,GAAG,uCAAuC,CAAC;AAClE,QAAA,wBAAwB,GAAG,mCAAmC,CAAC;AAE5E,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,yCAAuB,CAAA;IACvB,mCAAiB,CAAA;AACnB,CAAC,EAHW,cAAc,8BAAd,cAAc,QAGzB;AAEY,QAAA,gBAAgB,GAAG,4CAA4C,CAAC;AAChE,QAAA,2BAA2B,GACtC,4CAA4C,CAAC;AAClC,QAAA,4BAA4B,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS;AACjD,QAAA,6CAA6C,GAAG,GAAG,CAAC,CAAC,2EAA2E;AAEhI,QAAA,6BAA6B,GAAG,QAAQ,CAAC;AACzC,QAAA,uBAAuB,GAAG,GAAG,CAAC;AAC9B,QAAA,kBAAkB,GAAG,KAAK,CAAC;AAC3B,QAAA,mBAAmB,GAAG,EAAE,GAAG,IAAI,CAAC;AAChC,QAAA,yBAAyB,GAAG,CAAC,CAAC;AAE9B,QAAA,sBAAsB,GAAG,kBAAkB,CAAC;AAE5C,QAAA,2BAA2B,GAAG;IACzC,cAAc,EAAE,OAAO;IACvB,WAAW,EAAE,2BAAmB;IAChC,eAAe,EAAE,iCAAyB;IAC1C,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,EAAE;CACX,CAAC;AAEW,QAAA,+BAA+B,GAA0B;IACpE,YAAY,EAAE;QACZ,eAAe,EAAE,uBAAW;KAC7B;IACD,qBAAqB,EAAE,IAAI;IAC3B,MAAM,EAAE,EAAE;IACV,iBAAiB,EAAE,IAAI;IACvB,mBAAmB,EAAE,IAAI;IACzB,eAAe,EAAE,IAAI;IACrB,kBAAkB,EAAE,CAAC;IACrB,kBAAkB,EAAE,EAAE;IACtB,wCAAwC,EAAE,GAAG;CAC9C,CAAC;AAEW,QAAA,+BAA+B,GAAwB;IAClE,CAAC,kBAAS,CAAC,OAAO,CAAC,EAAE,mCAA2B;CACjD,CAAC","sourcesContent":["import { AddressZero } from '@ethersproject/constants';\nimport { BtcScope, SolScope } from '@metamask/keyring-api';\nimport type { Hex } from '@metamask/utils';\n\nimport { CHAIN_IDS } from './chains';\nimport type { BridgeControllerState } from '../types';\n\nexport const ALLOWED_BRIDGE_CHAIN_IDS = [\n CHAIN_IDS.MAINNET,\n CHAIN_IDS.BSC,\n CHAIN_IDS.POLYGON,\n CHAIN_IDS.ZKSYNC_ERA,\n CHAIN_IDS.AVALANCHE,\n CHAIN_IDS.OPTIMISM,\n CHAIN_IDS.ARBITRUM,\n CHAIN_IDS.LINEA_MAINNET,\n CHAIN_IDS.BASE,\n CHAIN_IDS.SEI,\n SolScope.Mainnet,\n BtcScope.Mainnet,\n] as const;\n\nexport type AllowedBridgeChainIds = (typeof ALLOWED_BRIDGE_CHAIN_IDS)[number];\n\nexport const BRIDGE_DEV_API_BASE_URL = 'https://bridge.dev-api.cx.metamask.io';\nexport const BRIDGE_PROD_API_BASE_URL = 'https://bridge.api.cx.metamask.io';\n\nexport enum BridgeClientId {\n EXTENSION = 'extension',\n MOBILE = 'mobile',\n}\n\nexport const ETH_USDT_ADDRESS = '0xdac17f958d2ee523a2206206994597c13d831ec7';\nexport const METABRIDGE_ETHEREUM_ADDRESS =\n '0x0439e60F02a8900a951603950d8D4527f400C3f1';\nexport const BRIDGE_QUOTE_MAX_ETA_SECONDS = 60 * 60; // 1 hour\nexport const BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE = 0.5; // if a quote returns in x times less return than the best quote, ignore it\n\nexport const BRIDGE_PREFERRED_GAS_ESTIMATE = 'medium';\nexport const BRIDGE_DEFAULT_SLIPPAGE = 0.5;\nexport const BRIDGE_MM_FEE_RATE = 0.875;\nexport const REFRESH_INTERVAL_MS = 30 * 1000;\nexport const DEFAULT_MAX_REFRESH_COUNT = 5;\n\nexport const BRIDGE_CONTROLLER_NAME = 'BridgeController';\n\nexport const DEFAULT_FEATURE_FLAG_CONFIG = {\n minimumVersion: '0.0.0',\n refreshRate: REFRESH_INTERVAL_MS,\n maxRefreshCount: DEFAULT_MAX_REFRESH_COUNT,\n support: false,\n chains: {},\n};\n\nexport const DEFAULT_BRIDGE_CONTROLLER_STATE: BridgeControllerState = {\n quoteRequest: {\n srcTokenAddress: AddressZero,\n },\n quotesInitialLoadTime: null,\n quotes: [],\n quotesLastFetched: null,\n quotesLoadingStatus: null,\n quoteFetchError: null,\n quotesRefreshCount: 0,\n assetExchangeRates: {},\n minimumBalanceForRentExemptionInLamports: '0',\n};\n\nexport const METABRIDGE_CHAIN_TO_ADDRESS_MAP: Record<Hex, string> = {\n [CHAIN_IDS.MAINNET]: METABRIDGE_ETHEREUM_ADDRESS,\n};\n"]}
1
+ {"version":3,"file":"bridge.cjs","sourceRoot":"","sources":["../../src/constants/bridge.ts"],"names":[],"mappings":";;;AAAA,wDAAuD;AACvD,uDAA2D;AAG3D,yCAAqC;AAGxB,QAAA,wBAAwB,GAAG;IACtC,kBAAS,CAAC,OAAO;IACjB,kBAAS,CAAC,GAAG;IACb,kBAAS,CAAC,OAAO;IACjB,kBAAS,CAAC,UAAU;IACpB,kBAAS,CAAC,SAAS;IACnB,kBAAS,CAAC,QAAQ;IAClB,kBAAS,CAAC,QAAQ;IAClB,kBAAS,CAAC,aAAa;IACvB,kBAAS,CAAC,IAAI;IACd,kBAAS,CAAC,GAAG;IACb,sBAAQ,CAAC,OAAO;IAChB,sBAAQ,CAAC,OAAO;CACR,CAAC;AAIE,QAAA,uBAAuB,GAAG,uCAAuC,CAAC;AAClE,QAAA,wBAAwB,GAAG,mCAAmC,CAAC;AAE5E,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,yCAAuB,CAAA;IACvB,mCAAiB,CAAA;AACnB,CAAC,EAHW,cAAc,8BAAd,cAAc,QAGzB;AAEY,QAAA,gBAAgB,GAAG,4CAA4C,CAAC;AAChE,QAAA,2BAA2B,GACtC,4CAA4C,CAAC;AAClC,QAAA,4BAA4B,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS;AACjD,QAAA,6CAA6C,GAAG,GAAG,CAAC,CAAC,2EAA2E;AAEhI,QAAA,6BAA6B,GAAG,QAAQ,CAAC;AACzC,QAAA,kBAAkB,GAAG,KAAK,CAAC;AAC3B,QAAA,mBAAmB,GAAG,EAAE,GAAG,IAAI,CAAC;AAChC,QAAA,yBAAyB,GAAG,CAAC,CAAC;AAE9B,QAAA,sBAAsB,GAAG,kBAAkB,CAAC;AAE5C,QAAA,2BAA2B,GAAG;IACzC,cAAc,EAAE,OAAO;IACvB,WAAW,EAAE,2BAAmB;IAChC,eAAe,EAAE,iCAAyB;IAC1C,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,EAAE;CACX,CAAC;AAEW,QAAA,+BAA+B,GAA0B;IACpE,YAAY,EAAE;QACZ,eAAe,EAAE,uBAAW;KAC7B;IACD,qBAAqB,EAAE,IAAI;IAC3B,MAAM,EAAE,EAAE;IACV,iBAAiB,EAAE,IAAI;IACvB,mBAAmB,EAAE,IAAI;IACzB,eAAe,EAAE,IAAI;IACrB,kBAAkB,EAAE,CAAC;IACrB,kBAAkB,EAAE,EAAE;IACtB,wCAAwC,EAAE,GAAG;CAC9C,CAAC;AAEW,QAAA,+BAA+B,GAAwB;IAClE,CAAC,kBAAS,CAAC,OAAO,CAAC,EAAE,mCAA2B;CACjD,CAAC","sourcesContent":["import { AddressZero } from '@ethersproject/constants';\nimport { BtcScope, SolScope } from '@metamask/keyring-api';\nimport type { Hex } from '@metamask/utils';\n\nimport { CHAIN_IDS } from './chains';\nimport type { BridgeControllerState } from '../types';\n\nexport const ALLOWED_BRIDGE_CHAIN_IDS = [\n CHAIN_IDS.MAINNET,\n CHAIN_IDS.BSC,\n CHAIN_IDS.POLYGON,\n CHAIN_IDS.ZKSYNC_ERA,\n CHAIN_IDS.AVALANCHE,\n CHAIN_IDS.OPTIMISM,\n CHAIN_IDS.ARBITRUM,\n CHAIN_IDS.LINEA_MAINNET,\n CHAIN_IDS.BASE,\n CHAIN_IDS.SEI,\n SolScope.Mainnet,\n BtcScope.Mainnet,\n] as const;\n\nexport type AllowedBridgeChainIds = (typeof ALLOWED_BRIDGE_CHAIN_IDS)[number];\n\nexport const BRIDGE_DEV_API_BASE_URL = 'https://bridge.dev-api.cx.metamask.io';\nexport const BRIDGE_PROD_API_BASE_URL = 'https://bridge.api.cx.metamask.io';\n\nexport enum BridgeClientId {\n EXTENSION = 'extension',\n MOBILE = 'mobile',\n}\n\nexport const ETH_USDT_ADDRESS = '0xdac17f958d2ee523a2206206994597c13d831ec7';\nexport const METABRIDGE_ETHEREUM_ADDRESS =\n '0x0439e60F02a8900a951603950d8D4527f400C3f1';\nexport const BRIDGE_QUOTE_MAX_ETA_SECONDS = 60 * 60; // 1 hour\nexport const BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE = 0.5; // if a quote returns in x times less return than the best quote, ignore it\n\nexport const BRIDGE_PREFERRED_GAS_ESTIMATE = 'medium';\nexport const BRIDGE_MM_FEE_RATE = 0.875;\nexport const REFRESH_INTERVAL_MS = 30 * 1000;\nexport const DEFAULT_MAX_REFRESH_COUNT = 5;\n\nexport const BRIDGE_CONTROLLER_NAME = 'BridgeController';\n\nexport const DEFAULT_FEATURE_FLAG_CONFIG = {\n minimumVersion: '0.0.0',\n refreshRate: REFRESH_INTERVAL_MS,\n maxRefreshCount: DEFAULT_MAX_REFRESH_COUNT,\n support: false,\n chains: {},\n};\n\nexport const DEFAULT_BRIDGE_CONTROLLER_STATE: BridgeControllerState = {\n quoteRequest: {\n srcTokenAddress: AddressZero,\n },\n quotesInitialLoadTime: null,\n quotes: [],\n quotesLastFetched: null,\n quotesLoadingStatus: null,\n quoteFetchError: null,\n quotesRefreshCount: 0,\n assetExchangeRates: {},\n minimumBalanceForRentExemptionInLamports: '0',\n};\n\nexport const METABRIDGE_CHAIN_TO_ADDRESS_MAP: Record<Hex, string> = {\n [CHAIN_IDS.MAINNET]: METABRIDGE_ETHEREUM_ADDRESS,\n};\n"]}
@@ -14,7 +14,6 @@ export declare const METABRIDGE_ETHEREUM_ADDRESS = "0x0439e60F02a8900a951603950d
14
14
  export declare const BRIDGE_QUOTE_MAX_ETA_SECONDS: number;
15
15
  export declare const BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE = 0.5;
16
16
  export declare const BRIDGE_PREFERRED_GAS_ESTIMATE = "medium";
17
- export declare const BRIDGE_DEFAULT_SLIPPAGE = 0.5;
18
17
  export declare const BRIDGE_MM_FEE_RATE = 0.875;
19
18
  export declare const REFRESH_INTERVAL_MS: number;
20
19
  export declare const DEFAULT_MAX_REFRESH_COUNT = 5;
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.d.cts","sourceRoot":"","sources":["../../src/constants/bridge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,8BAA8B;AAC3D,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAiB;AAEtD,eAAO,MAAM,wBAAwB,uIAa3B,CAAC;AAEX,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9E,eAAO,MAAM,uBAAuB,0CAA0C,CAAC;AAC/E,eAAO,MAAM,wBAAwB,sCAAsC,CAAC;AAE5E,oBAAY,cAAc;IACxB,SAAS,cAAc;IACvB,MAAM,WAAW;CAClB;AAED,eAAO,MAAM,gBAAgB,+CAA+C,CAAC;AAC7E,eAAO,MAAM,2BAA2B,+CACM,CAAC;AAC/C,eAAO,MAAM,4BAA4B,QAAU,CAAC;AACpD,eAAO,MAAM,6CAA6C,MAAM,CAAC;AAEjE,eAAO,MAAM,6BAA6B,WAAW,CAAC;AACtD,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AACxC,eAAO,MAAM,mBAAmB,QAAY,CAAC;AAC7C,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C,eAAO,MAAM,sBAAsB,qBAAqB,CAAC;AAEzD,eAAO,MAAM,2BAA2B;;;;;;CAMvC,CAAC;AAEF,eAAO,MAAM,+BAA+B,EAAE,qBAY7C,CAAC;AAEF,eAAO,MAAM,+BAA+B,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAE/D,CAAC"}
1
+ {"version":3,"file":"bridge.d.cts","sourceRoot":"","sources":["../../src/constants/bridge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,8BAA8B;AAC3D,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAiB;AAEtD,eAAO,MAAM,wBAAwB,uIAa3B,CAAC;AAEX,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9E,eAAO,MAAM,uBAAuB,0CAA0C,CAAC;AAC/E,eAAO,MAAM,wBAAwB,sCAAsC,CAAC;AAE5E,oBAAY,cAAc;IACxB,SAAS,cAAc;IACvB,MAAM,WAAW;CAClB;AAED,eAAO,MAAM,gBAAgB,+CAA+C,CAAC;AAC7E,eAAO,MAAM,2BAA2B,+CACM,CAAC;AAC/C,eAAO,MAAM,4BAA4B,QAAU,CAAC;AACpD,eAAO,MAAM,6CAA6C,MAAM,CAAC;AAEjE,eAAO,MAAM,6BAA6B,WAAW,CAAC;AACtD,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AACxC,eAAO,MAAM,mBAAmB,QAAY,CAAC;AAC7C,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C,eAAO,MAAM,sBAAsB,qBAAqB,CAAC;AAEzD,eAAO,MAAM,2BAA2B;;;;;;CAMvC,CAAC;AAEF,eAAO,MAAM,+BAA+B,EAAE,qBAY7C,CAAC;AAEF,eAAO,MAAM,+BAA+B,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAE/D,CAAC"}
@@ -14,7 +14,6 @@ export declare const METABRIDGE_ETHEREUM_ADDRESS = "0x0439e60F02a8900a951603950d
14
14
  export declare const BRIDGE_QUOTE_MAX_ETA_SECONDS: number;
15
15
  export declare const BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE = 0.5;
16
16
  export declare const BRIDGE_PREFERRED_GAS_ESTIMATE = "medium";
17
- export declare const BRIDGE_DEFAULT_SLIPPAGE = 0.5;
18
17
  export declare const BRIDGE_MM_FEE_RATE = 0.875;
19
18
  export declare const REFRESH_INTERVAL_MS: number;
20
19
  export declare const DEFAULT_MAX_REFRESH_COUNT = 5;
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.d.mts","sourceRoot":"","sources":["../../src/constants/bridge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,8BAA8B;AAC3D,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAiB;AAEtD,eAAO,MAAM,wBAAwB,uIAa3B,CAAC;AAEX,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9E,eAAO,MAAM,uBAAuB,0CAA0C,CAAC;AAC/E,eAAO,MAAM,wBAAwB,sCAAsC,CAAC;AAE5E,oBAAY,cAAc;IACxB,SAAS,cAAc;IACvB,MAAM,WAAW;CAClB;AAED,eAAO,MAAM,gBAAgB,+CAA+C,CAAC;AAC7E,eAAO,MAAM,2BAA2B,+CACM,CAAC;AAC/C,eAAO,MAAM,4BAA4B,QAAU,CAAC;AACpD,eAAO,MAAM,6CAA6C,MAAM,CAAC;AAEjE,eAAO,MAAM,6BAA6B,WAAW,CAAC;AACtD,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AACxC,eAAO,MAAM,mBAAmB,QAAY,CAAC;AAC7C,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C,eAAO,MAAM,sBAAsB,qBAAqB,CAAC;AAEzD,eAAO,MAAM,2BAA2B;;;;;;CAMvC,CAAC;AAEF,eAAO,MAAM,+BAA+B,EAAE,qBAY7C,CAAC;AAEF,eAAO,MAAM,+BAA+B,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAE/D,CAAC"}
1
+ {"version":3,"file":"bridge.d.mts","sourceRoot":"","sources":["../../src/constants/bridge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,8BAA8B;AAC3D,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAiB;AAEtD,eAAO,MAAM,wBAAwB,uIAa3B,CAAC;AAEX,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9E,eAAO,MAAM,uBAAuB,0CAA0C,CAAC;AAC/E,eAAO,MAAM,wBAAwB,sCAAsC,CAAC;AAE5E,oBAAY,cAAc;IACxB,SAAS,cAAc;IACvB,MAAM,WAAW;CAClB;AAED,eAAO,MAAM,gBAAgB,+CAA+C,CAAC;AAC7E,eAAO,MAAM,2BAA2B,+CACM,CAAC;AAC/C,eAAO,MAAM,4BAA4B,QAAU,CAAC;AACpD,eAAO,MAAM,6CAA6C,MAAM,CAAC;AAEjE,eAAO,MAAM,6BAA6B,WAAW,CAAC;AACtD,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AACxC,eAAO,MAAM,mBAAmB,QAAY,CAAC;AAC7C,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C,eAAO,MAAM,sBAAsB,qBAAqB,CAAC;AAEzD,eAAO,MAAM,2BAA2B;;;;;;CAMvC,CAAC;AAEF,eAAO,MAAM,+BAA+B,EAAE,qBAY7C,CAAC;AAEF,eAAO,MAAM,+BAA+B,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAE/D,CAAC"}
@@ -27,7 +27,6 @@ export const METABRIDGE_ETHEREUM_ADDRESS = '0x0439e60F02a8900a951603950d8D4527f4
27
27
  export const BRIDGE_QUOTE_MAX_ETA_SECONDS = 60 * 60; // 1 hour
28
28
  export const BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE = 0.5; // if a quote returns in x times less return than the best quote, ignore it
29
29
  export const BRIDGE_PREFERRED_GAS_ESTIMATE = 'medium';
30
- export const BRIDGE_DEFAULT_SLIPPAGE = 0.5;
31
30
  export const BRIDGE_MM_FEE_RATE = 0.875;
32
31
  export const REFRESH_INTERVAL_MS = 30 * 1000;
33
32
  export const DEFAULT_MAX_REFRESH_COUNT = 5;
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.mjs","sourceRoot":"","sources":["../../src/constants/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,iCAAiC;AACvD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,8BAA8B;AAG3D,OAAO,EAAE,SAAS,EAAE,qBAAiB;AAGrC,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,SAAS,CAAC,OAAO;IACjB,SAAS,CAAC,GAAG;IACb,SAAS,CAAC,OAAO;IACjB,SAAS,CAAC,UAAU;IACpB,SAAS,CAAC,SAAS;IACnB,SAAS,CAAC,QAAQ;IAClB,SAAS,CAAC,QAAQ;IAClB,SAAS,CAAC,aAAa;IACvB,SAAS,CAAC,IAAI;IACd,SAAS,CAAC,GAAG;IACb,QAAQ,CAAC,OAAO;IAChB,QAAQ,CAAC,OAAO;CACR,CAAC;AAIX,MAAM,CAAC,MAAM,uBAAuB,GAAG,uCAAuC,CAAC;AAC/E,MAAM,CAAC,MAAM,wBAAwB,GAAG,mCAAmC,CAAC;AAE5E,MAAM,CAAN,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,yCAAuB,CAAA;IACvB,mCAAiB,CAAA;AACnB,CAAC,EAHW,cAAc,KAAd,cAAc,QAGzB;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,4CAA4C,CAAC;AAC7E,MAAM,CAAC,MAAM,2BAA2B,GACtC,4CAA4C,CAAC;AAC/C,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS;AAC9D,MAAM,CAAC,MAAM,6CAA6C,GAAG,GAAG,CAAC,CAAC,2EAA2E;AAE7I,MAAM,CAAC,MAAM,6BAA6B,GAAG,QAAQ,CAAC;AACtD,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAC3C,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACxC,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,GAAG,IAAI,CAAC;AAC7C,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAE3C,MAAM,CAAC,MAAM,sBAAsB,GAAG,kBAAkB,CAAC;AAEzD,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,cAAc,EAAE,OAAO;IACvB,WAAW,EAAE,mBAAmB;IAChC,eAAe,EAAE,yBAAyB;IAC1C,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,EAAE;CACX,CAAC;AAEF,MAAM,CAAC,MAAM,+BAA+B,GAA0B;IACpE,YAAY,EAAE;QACZ,eAAe,EAAE,WAAW;KAC7B;IACD,qBAAqB,EAAE,IAAI;IAC3B,MAAM,EAAE,EAAE;IACV,iBAAiB,EAAE,IAAI;IACvB,mBAAmB,EAAE,IAAI;IACzB,eAAe,EAAE,IAAI;IACrB,kBAAkB,EAAE,CAAC;IACrB,kBAAkB,EAAE,EAAE;IACtB,wCAAwC,EAAE,GAAG;CAC9C,CAAC;AAEF,MAAM,CAAC,MAAM,+BAA+B,GAAwB;IAClE,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,2BAA2B;CACjD,CAAC","sourcesContent":["import { AddressZero } from '@ethersproject/constants';\nimport { BtcScope, SolScope } from '@metamask/keyring-api';\nimport type { Hex } from '@metamask/utils';\n\nimport { CHAIN_IDS } from './chains';\nimport type { BridgeControllerState } from '../types';\n\nexport const ALLOWED_BRIDGE_CHAIN_IDS = [\n CHAIN_IDS.MAINNET,\n CHAIN_IDS.BSC,\n CHAIN_IDS.POLYGON,\n CHAIN_IDS.ZKSYNC_ERA,\n CHAIN_IDS.AVALANCHE,\n CHAIN_IDS.OPTIMISM,\n CHAIN_IDS.ARBITRUM,\n CHAIN_IDS.LINEA_MAINNET,\n CHAIN_IDS.BASE,\n CHAIN_IDS.SEI,\n SolScope.Mainnet,\n BtcScope.Mainnet,\n] as const;\n\nexport type AllowedBridgeChainIds = (typeof ALLOWED_BRIDGE_CHAIN_IDS)[number];\n\nexport const BRIDGE_DEV_API_BASE_URL = 'https://bridge.dev-api.cx.metamask.io';\nexport const BRIDGE_PROD_API_BASE_URL = 'https://bridge.api.cx.metamask.io';\n\nexport enum BridgeClientId {\n EXTENSION = 'extension',\n MOBILE = 'mobile',\n}\n\nexport const ETH_USDT_ADDRESS = '0xdac17f958d2ee523a2206206994597c13d831ec7';\nexport const METABRIDGE_ETHEREUM_ADDRESS =\n '0x0439e60F02a8900a951603950d8D4527f400C3f1';\nexport const BRIDGE_QUOTE_MAX_ETA_SECONDS = 60 * 60; // 1 hour\nexport const BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE = 0.5; // if a quote returns in x times less return than the best quote, ignore it\n\nexport const BRIDGE_PREFERRED_GAS_ESTIMATE = 'medium';\nexport const BRIDGE_DEFAULT_SLIPPAGE = 0.5;\nexport const BRIDGE_MM_FEE_RATE = 0.875;\nexport const REFRESH_INTERVAL_MS = 30 * 1000;\nexport const DEFAULT_MAX_REFRESH_COUNT = 5;\n\nexport const BRIDGE_CONTROLLER_NAME = 'BridgeController';\n\nexport const DEFAULT_FEATURE_FLAG_CONFIG = {\n minimumVersion: '0.0.0',\n refreshRate: REFRESH_INTERVAL_MS,\n maxRefreshCount: DEFAULT_MAX_REFRESH_COUNT,\n support: false,\n chains: {},\n};\n\nexport const DEFAULT_BRIDGE_CONTROLLER_STATE: BridgeControllerState = {\n quoteRequest: {\n srcTokenAddress: AddressZero,\n },\n quotesInitialLoadTime: null,\n quotes: [],\n quotesLastFetched: null,\n quotesLoadingStatus: null,\n quoteFetchError: null,\n quotesRefreshCount: 0,\n assetExchangeRates: {},\n minimumBalanceForRentExemptionInLamports: '0',\n};\n\nexport const METABRIDGE_CHAIN_TO_ADDRESS_MAP: Record<Hex, string> = {\n [CHAIN_IDS.MAINNET]: METABRIDGE_ETHEREUM_ADDRESS,\n};\n"]}
1
+ {"version":3,"file":"bridge.mjs","sourceRoot":"","sources":["../../src/constants/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,iCAAiC;AACvD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,8BAA8B;AAG3D,OAAO,EAAE,SAAS,EAAE,qBAAiB;AAGrC,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,SAAS,CAAC,OAAO;IACjB,SAAS,CAAC,GAAG;IACb,SAAS,CAAC,OAAO;IACjB,SAAS,CAAC,UAAU;IACpB,SAAS,CAAC,SAAS;IACnB,SAAS,CAAC,QAAQ;IAClB,SAAS,CAAC,QAAQ;IAClB,SAAS,CAAC,aAAa;IACvB,SAAS,CAAC,IAAI;IACd,SAAS,CAAC,GAAG;IACb,QAAQ,CAAC,OAAO;IAChB,QAAQ,CAAC,OAAO;CACR,CAAC;AAIX,MAAM,CAAC,MAAM,uBAAuB,GAAG,uCAAuC,CAAC;AAC/E,MAAM,CAAC,MAAM,wBAAwB,GAAG,mCAAmC,CAAC;AAE5E,MAAM,CAAN,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,yCAAuB,CAAA;IACvB,mCAAiB,CAAA;AACnB,CAAC,EAHW,cAAc,KAAd,cAAc,QAGzB;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,4CAA4C,CAAC;AAC7E,MAAM,CAAC,MAAM,2BAA2B,GACtC,4CAA4C,CAAC;AAC/C,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS;AAC9D,MAAM,CAAC,MAAM,6CAA6C,GAAG,GAAG,CAAC,CAAC,2EAA2E;AAE7I,MAAM,CAAC,MAAM,6BAA6B,GAAG,QAAQ,CAAC;AACtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACxC,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,GAAG,IAAI,CAAC;AAC7C,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAE3C,MAAM,CAAC,MAAM,sBAAsB,GAAG,kBAAkB,CAAC;AAEzD,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,cAAc,EAAE,OAAO;IACvB,WAAW,EAAE,mBAAmB;IAChC,eAAe,EAAE,yBAAyB;IAC1C,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,EAAE;CACX,CAAC;AAEF,MAAM,CAAC,MAAM,+BAA+B,GAA0B;IACpE,YAAY,EAAE;QACZ,eAAe,EAAE,WAAW;KAC7B;IACD,qBAAqB,EAAE,IAAI;IAC3B,MAAM,EAAE,EAAE;IACV,iBAAiB,EAAE,IAAI;IACvB,mBAAmB,EAAE,IAAI;IACzB,eAAe,EAAE,IAAI;IACrB,kBAAkB,EAAE,CAAC;IACrB,kBAAkB,EAAE,EAAE;IACtB,wCAAwC,EAAE,GAAG;CAC9C,CAAC;AAEF,MAAM,CAAC,MAAM,+BAA+B,GAAwB;IAClE,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,2BAA2B;CACjD,CAAC","sourcesContent":["import { AddressZero } from '@ethersproject/constants';\nimport { BtcScope, SolScope } from '@metamask/keyring-api';\nimport type { Hex } from '@metamask/utils';\n\nimport { CHAIN_IDS } from './chains';\nimport type { BridgeControllerState } from '../types';\n\nexport const ALLOWED_BRIDGE_CHAIN_IDS = [\n CHAIN_IDS.MAINNET,\n CHAIN_IDS.BSC,\n CHAIN_IDS.POLYGON,\n CHAIN_IDS.ZKSYNC_ERA,\n CHAIN_IDS.AVALANCHE,\n CHAIN_IDS.OPTIMISM,\n CHAIN_IDS.ARBITRUM,\n CHAIN_IDS.LINEA_MAINNET,\n CHAIN_IDS.BASE,\n CHAIN_IDS.SEI,\n SolScope.Mainnet,\n BtcScope.Mainnet,\n] as const;\n\nexport type AllowedBridgeChainIds = (typeof ALLOWED_BRIDGE_CHAIN_IDS)[number];\n\nexport const BRIDGE_DEV_API_BASE_URL = 'https://bridge.dev-api.cx.metamask.io';\nexport const BRIDGE_PROD_API_BASE_URL = 'https://bridge.api.cx.metamask.io';\n\nexport enum BridgeClientId {\n EXTENSION = 'extension',\n MOBILE = 'mobile',\n}\n\nexport const ETH_USDT_ADDRESS = '0xdac17f958d2ee523a2206206994597c13d831ec7';\nexport const METABRIDGE_ETHEREUM_ADDRESS =\n '0x0439e60F02a8900a951603950d8D4527f400C3f1';\nexport const BRIDGE_QUOTE_MAX_ETA_SECONDS = 60 * 60; // 1 hour\nexport const BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE = 0.5; // if a quote returns in x times less return than the best quote, ignore it\n\nexport const BRIDGE_PREFERRED_GAS_ESTIMATE = 'medium';\nexport const BRIDGE_MM_FEE_RATE = 0.875;\nexport const REFRESH_INTERVAL_MS = 30 * 1000;\nexport const DEFAULT_MAX_REFRESH_COUNT = 5;\n\nexport const BRIDGE_CONTROLLER_NAME = 'BridgeController';\n\nexport const DEFAULT_FEATURE_FLAG_CONFIG = {\n minimumVersion: '0.0.0',\n refreshRate: REFRESH_INTERVAL_MS,\n maxRefreshCount: DEFAULT_MAX_REFRESH_COUNT,\n support: false,\n chains: {},\n};\n\nexport const DEFAULT_BRIDGE_CONTROLLER_STATE: BridgeControllerState = {\n quoteRequest: {\n srcTokenAddress: AddressZero,\n },\n quotesInitialLoadTime: null,\n quotes: [],\n quotesLastFetched: null,\n quotesLoadingStatus: null,\n quoteFetchError: null,\n quotesRefreshCount: 0,\n assetExchangeRates: {},\n minimumBalanceForRentExemptionInLamports: '0',\n};\n\nexport const METABRIDGE_CHAIN_TO_ADDRESS_MAP: Record<Hex, string> = {\n [CHAIN_IDS.MAINNET]: METABRIDGE_ETHEREUM_ADDRESS,\n};\n"]}
package/dist/index.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.fetchBridgeTokens = exports.calcLatestSrcBalance = exports.calcSlippagePercentage = exports.formatEtaInMinutes = exports.isValidQuoteRequest = exports.isCrossChain = exports.getDefaultBridgeControllerState = exports.getNativeAssetForChainId = exports.isBitcoinChainId = exports.isSolanaChainId = exports.isNativeAddress = exports.isEthUsdt = exports.getEthUsdtResetData = exports.MetricsSwapType = exports.MetricsActionType = exports.SWAPS_API_V2_BASE_URL = exports.SWAPS_CHAINID_DEFAULT_TOKEN_MAP = exports.BRIDGE_PROD_API_BASE_URL = exports.BRIDGE_DEV_API_BASE_URL = exports.METABRIDGE_CHAIN_TO_ADDRESS_MAP = exports.DEFAULT_BRIDGE_CONTROLLER_STATE = exports.DEFAULT_MAX_REFRESH_COUNT = exports.REFRESH_INTERVAL_MS = exports.BRIDGE_MM_FEE_RATE = exports.BRIDGE_DEFAULT_SLIPPAGE = exports.BRIDGE_PREFERRED_GAS_ESTIMATE = exports.BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE = exports.BRIDGE_QUOTE_MAX_ETA_SECONDS = exports.BRIDGE_CONTROLLER_NAME = exports.BridgeClientId = exports.ALLOWED_BRIDGE_CHAIN_IDS = exports.FeatureId = exports.BridgeAssetSchema = exports.ActionTypes = exports.FeeType = exports.BridgeBackgroundAction = exports.BridgeUserAction = exports.RequestStatus = exports.ChainId = exports.SortOrder = exports.AssetType = exports.StatusTypes = exports.isCustomSlippage = exports.isHardwareWallet = exports.getSwapType = exports.getRequestParams = exports.formatProviderLabel = exports.UNIFIED_SWAP_BRIDGE_EVENT_CATEGORY = exports.UnifiedSwapBridgeEventName = exports.BridgeController = void 0;
4
- exports.getBridgeFeatureFlags = exports.DEFAULT_FEATURE_FLAG_CONFIG = exports.selectMinimumBalanceForRentExemptionInSOL = exports.selectBridgeFeatureFlags = exports.selectIsQuoteExpired = exports.selectExchangeRateByChainIdAndAddress = exports.selectBridgeQuotes = exports.formatAddressToAssetId = exports.formatAddressToCaipReference = exports.formatChainIdToHex = exports.formatChainIdToCaip = void 0;
3
+ exports.formatChainIdToCaip = exports.fetchBridgeTokens = exports.calcLatestSrcBalance = exports.calcSlippagePercentage = exports.formatEtaInMinutes = exports.isValidQuoteRequest = exports.isCrossChain = exports.getDefaultBridgeControllerState = exports.getNativeAssetForChainId = exports.isBitcoinChainId = exports.isSolanaChainId = exports.isNativeAddress = exports.isEthUsdt = exports.getEthUsdtResetData = exports.MetricsSwapType = exports.MetricsActionType = exports.SWAPS_API_V2_BASE_URL = exports.SWAPS_CHAINID_DEFAULT_TOKEN_MAP = exports.BRIDGE_PROD_API_BASE_URL = exports.BRIDGE_DEV_API_BASE_URL = exports.METABRIDGE_CHAIN_TO_ADDRESS_MAP = exports.DEFAULT_BRIDGE_CONTROLLER_STATE = exports.DEFAULT_MAX_REFRESH_COUNT = exports.REFRESH_INTERVAL_MS = exports.BRIDGE_MM_FEE_RATE = exports.BRIDGE_PREFERRED_GAS_ESTIMATE = exports.BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE = exports.BRIDGE_QUOTE_MAX_ETA_SECONDS = exports.BRIDGE_CONTROLLER_NAME = exports.BridgeClientId = exports.ALLOWED_BRIDGE_CHAIN_IDS = exports.FeatureId = exports.BridgeAssetSchema = exports.ActionTypes = exports.FeeType = exports.BridgeBackgroundAction = exports.BridgeUserAction = exports.RequestStatus = exports.ChainId = exports.SortOrder = exports.AssetType = exports.StatusTypes = exports.isCustomSlippage = exports.isHardwareWallet = exports.getSwapType = exports.getRequestParams = exports.formatProviderLabel = exports.UNIFIED_SWAP_BRIDGE_EVENT_CATEGORY = exports.UnifiedSwapBridgeEventName = exports.BridgeController = void 0;
4
+ exports.BRIDGE_DEFAULT_SLIPPAGE = exports.getBridgeFeatureFlags = exports.DEFAULT_FEATURE_FLAG_CONFIG = exports.selectMinimumBalanceForRentExemptionInSOL = exports.selectBridgeFeatureFlags = exports.selectIsQuoteExpired = exports.selectExchangeRateByChainIdAndAddress = exports.selectDefaultSlippagePercentage = exports.selectBridgeQuotes = exports.formatAddressToAssetId = exports.formatAddressToCaipReference = exports.formatChainIdToHex = void 0;
5
5
  var bridge_controller_1 = require("./bridge-controller.cjs");
6
6
  Object.defineProperty(exports, "BridgeController", { enumerable: true, get: function () { return bridge_controller_1.BridgeController; } });
7
7
  var constants_1 = require("./utils/metrics/constants.cjs");
@@ -34,7 +34,6 @@ Object.defineProperty(exports, "BRIDGE_CONTROLLER_NAME", { enumerable: true, get
34
34
  Object.defineProperty(exports, "BRIDGE_QUOTE_MAX_ETA_SECONDS", { enumerable: true, get: function () { return bridge_1.BRIDGE_QUOTE_MAX_ETA_SECONDS; } });
35
35
  Object.defineProperty(exports, "BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE", { enumerable: true, get: function () { return bridge_1.BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE; } });
36
36
  Object.defineProperty(exports, "BRIDGE_PREFERRED_GAS_ESTIMATE", { enumerable: true, get: function () { return bridge_1.BRIDGE_PREFERRED_GAS_ESTIMATE; } });
37
- Object.defineProperty(exports, "BRIDGE_DEFAULT_SLIPPAGE", { enumerable: true, get: function () { return bridge_1.BRIDGE_DEFAULT_SLIPPAGE; } });
38
37
  Object.defineProperty(exports, "BRIDGE_MM_FEE_RATE", { enumerable: true, get: function () { return bridge_1.BRIDGE_MM_FEE_RATE; } });
39
38
  Object.defineProperty(exports, "REFRESH_INTERVAL_MS", { enumerable: true, get: function () { return bridge_1.REFRESH_INTERVAL_MS; } });
40
39
  Object.defineProperty(exports, "DEFAULT_MAX_REFRESH_COUNT", { enumerable: true, get: function () { return bridge_1.DEFAULT_MAX_REFRESH_COUNT; } });
@@ -76,6 +75,7 @@ Object.defineProperty(exports, "formatAddressToCaipReference", { enumerable: tru
76
75
  Object.defineProperty(exports, "formatAddressToAssetId", { enumerable: true, get: function () { return caip_formatters_1.formatAddressToAssetId; } });
77
76
  var selectors_1 = require("./selectors.cjs");
78
77
  Object.defineProperty(exports, "selectBridgeQuotes", { enumerable: true, get: function () { return selectors_1.selectBridgeQuotes; } });
78
+ Object.defineProperty(exports, "selectDefaultSlippagePercentage", { enumerable: true, get: function () { return selectors_1.selectDefaultSlippagePercentage; } });
79
79
  Object.defineProperty(exports, "selectExchangeRateByChainIdAndAddress", { enumerable: true, get: function () { return selectors_1.selectExchangeRateByChainIdAndAddress; } });
80
80
  Object.defineProperty(exports, "selectIsQuoteExpired", { enumerable: true, get: function () { return selectors_1.selectIsQuoteExpired; } });
81
81
  Object.defineProperty(exports, "selectBridgeFeatureFlags", { enumerable: true, get: function () { return selectors_1.selectBridgeFeatureFlags; } });
@@ -84,4 +84,6 @@ var bridge_3 = require("./constants/bridge.cjs");
84
84
  Object.defineProperty(exports, "DEFAULT_FEATURE_FLAG_CONFIG", { enumerable: true, get: function () { return bridge_3.DEFAULT_FEATURE_FLAG_CONFIG; } });
85
85
  var feature_flags_1 = require("./utils/feature-flags.cjs");
86
86
  Object.defineProperty(exports, "getBridgeFeatureFlags", { enumerable: true, get: function () { return feature_flags_1.getBridgeFeatureFlags; } });
87
+ var slippage_1 = require("./utils/slippage.cjs");
88
+ Object.defineProperty(exports, "BRIDGE_DEFAULT_SLIPPAGE", { enumerable: true, get: function () { return slippage_1.BRIDGE_DEFAULT_SLIPPAGE; } });
87
89
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAAA,6DAAuD;AAA9C,qHAAA,gBAAgB,OAAA;AAEzB,2DAGmC;AAFjC,uHAAA,0BAA0B,OAAA;AAC1B,+HAAA,kCAAkC,OAAA;AAapC,6DAMoC;AALlC,iHAAA,mBAAmB,OAAA;AACnB,8GAAA,gBAAgB,OAAA;AAChB,yGAAA,WAAW,OAAA;AACX,8GAAA,gBAAgB,OAAA;AAChB,8GAAA,gBAAgB,OAAA;AA4BlB,qCAAsC;AAA7B,oGAAA,WAAW,OAAA;AAEpB,qCAOiB;AANf,kGAAA,SAAS,OAAA;AACT,kGAAA,SAAS,OAAA;AACT,gGAAA,OAAO,OAAA;AACP,sGAAA,aAAa,OAAA;AACb,yGAAA,gBAAgB,OAAA;AAChB,+GAAA,sBAAsB,OAAA;AAGxB,qDAK4B;AAJ1B,qGAAA,OAAO,OAAA;AACP,yGAAA,WAAW,OAAA;AACX,+GAAA,iBAAiB,OAAA;AACjB,uGAAA,SAAS,OAAA;AAGX,iDAe4B;AAd1B,kHAAA,wBAAwB,OAAA;AACxB,wGAAA,cAAc,OAAA;AACd,gHAAA,sBAAsB,OAAA;AACtB,sHAAA,4BAA4B,OAAA;AAC5B,uIAAA,6CAA6C,OAAA;AAC7C,uHAAA,6BAA6B,OAAA;AAC7B,iHAAA,uBAAuB,OAAA;AACvB,4GAAA,kBAAkB,OAAA;AAClB,6GAAA,mBAAmB,OAAA;AACnB,mHAAA,yBAAyB,OAAA;AACzB,yHAAA,+BAA+B,OAAA;AAC/B,yHAAA,+BAA+B,OAAA;AAC/B,iHAAA,uBAAuB,OAAA;AACvB,kHAAA,wBAAwB,OAAA;AAK1B,iDAS4B;AAJ1B;;GAEG;AACH,yHAAA,+BAA+B,OAAA;AAGjC,+CAA0D;AAAjD,8GAAA,qBAAqB,OAAA;AAE9B,2DAA+E;AAAtE,8GAAA,iBAAiB,OAAA;AAAE,4GAAA,eAAe,OAAA;AAE3C,6CASwB;AARtB,6GAAA,mBAAmB,OAAA;AACnB,mGAAA,SAAS,OAAA;AACT,yGAAA,eAAe,OAAA;AACf,yGAAA,eAAe,OAAA;AACf,0GAAA,gBAAgB,OAAA;AAChB,kHAAA,wBAAwB,OAAA;AACxB,yHAAA,+BAA+B,OAAA;AAC/B,sGAAA,YAAY,OAAA;AAGd,2CAIuB;AAHrB,4GAAA,mBAAmB,OAAA;AACnB,2GAAA,kBAAkB,OAAA;AAClB,+GAAA,sBAAsB,OAAA;AAGxB,+CAAuD;AAA9C,+GAAA,oBAAoB,OAAA;AAE7B,2CAAkD;AAAzC,0GAAA,iBAAiB,OAAA;AAE1B,+DAKiC;AAJ/B,sHAAA,mBAAmB,OAAA;AACnB,qHAAA,kBAAkB,OAAA;AAClB,+HAAA,4BAA4B,OAAA;AAC5B,yHAAA,sBAAsB,OAAA;AAGxB,6CAOqB;AANnB,+GAAA,kBAAkB,OAAA;AAElB,kIAAA,qCAAqC,OAAA;AACrC,iHAAA,oBAAoB,OAAA;AACpB,qHAAA,wBAAwB,OAAA;AACxB,sIAAA,yCAAyC,OAAA;AAG3C,iDAAiE;AAAxD,qHAAA,2BAA2B,OAAA;AAEpC,2DAA8D;AAArD,sHAAA,qBAAqB,OAAA","sourcesContent":["export { BridgeController } from './bridge-controller';\n\nexport {\n UnifiedSwapBridgeEventName,\n UNIFIED_SWAP_BRIDGE_EVENT_CATEGORY,\n} from './utils/metrics/constants';\n\nexport type {\n RequiredEventContextFromClient,\n CrossChainSwapsEventProperties,\n TradeData,\n RequestParams,\n RequestMetadata,\n TxStatusData,\n QuoteFetchData,\n} from './utils/metrics/types';\n\nexport {\n formatProviderLabel,\n getRequestParams,\n getSwapType,\n isHardwareWallet,\n isCustomSlippage,\n} from './utils/metrics/properties';\n\nexport type {\n ChainConfiguration,\n L1GasFees,\n SolanaFees,\n QuoteMetadata,\n GasMultiplierByChainId,\n FeatureFlagResponse,\n BridgeAsset,\n GenericQuoteRequest,\n Protocol,\n TokenAmountValues,\n Step,\n RefuelData,\n Quote,\n QuoteResponse,\n FeeData,\n TxData,\n BridgeControllerState,\n BridgeControllerAction,\n BridgeControllerActions,\n BridgeControllerEvents,\n BridgeControllerMessenger,\n FeatureFlagsPlatformConfig,\n} from './types';\n\nexport { StatusTypes } from './types';\n\nexport {\n AssetType,\n SortOrder,\n ChainId,\n RequestStatus,\n BridgeUserAction,\n BridgeBackgroundAction,\n} from './types';\n\nexport {\n FeeType,\n ActionTypes,\n BridgeAssetSchema,\n FeatureId,\n} from './utils/validators';\n\nexport {\n ALLOWED_BRIDGE_CHAIN_IDS,\n BridgeClientId,\n BRIDGE_CONTROLLER_NAME,\n BRIDGE_QUOTE_MAX_ETA_SECONDS,\n BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE,\n BRIDGE_PREFERRED_GAS_ESTIMATE,\n BRIDGE_DEFAULT_SLIPPAGE,\n BRIDGE_MM_FEE_RATE,\n REFRESH_INTERVAL_MS,\n DEFAULT_MAX_REFRESH_COUNT,\n DEFAULT_BRIDGE_CONTROLLER_STATE,\n METABRIDGE_CHAIN_TO_ADDRESS_MAP,\n BRIDGE_DEV_API_BASE_URL,\n BRIDGE_PROD_API_BASE_URL,\n} from './constants/bridge';\n\nexport type { AllowedBridgeChainIds } from './constants/bridge';\n\nexport {\n /**\n * @deprecated This type should not be used. Use {@link BridgeAsset} instead.\n */\n type SwapsTokenObject,\n /**\n * @deprecated This map should not be used. Use getNativeAssetForChainId\" } instead.\n */\n SWAPS_CHAINID_DEFAULT_TOKEN_MAP,\n} from './constants/tokens';\n\nexport { SWAPS_API_V2_BASE_URL } from './constants/swaps';\n\nexport { MetricsActionType, MetricsSwapType } from './utils/metrics/constants';\n\nexport {\n getEthUsdtResetData,\n isEthUsdt,\n isNativeAddress,\n isSolanaChainId,\n isBitcoinChainId,\n getNativeAssetForChainId,\n getDefaultBridgeControllerState,\n isCrossChain,\n} from './utils/bridge';\n\nexport {\n isValidQuoteRequest,\n formatEtaInMinutes,\n calcSlippagePercentage,\n} from './utils/quote';\n\nexport { calcLatestSrcBalance } from './utils/balance';\n\nexport { fetchBridgeTokens } from './utils/fetch';\n\nexport {\n formatChainIdToCaip,\n formatChainIdToHex,\n formatAddressToCaipReference,\n formatAddressToAssetId,\n} from './utils/caip-formatters';\n\nexport {\n selectBridgeQuotes,\n type BridgeAppState,\n selectExchangeRateByChainIdAndAddress,\n selectIsQuoteExpired,\n selectBridgeFeatureFlags,\n selectMinimumBalanceForRentExemptionInSOL,\n} from './selectors';\n\nexport { DEFAULT_FEATURE_FLAG_CONFIG } from './constants/bridge';\n\nexport { getBridgeFeatureFlags } from './utils/feature-flags';\n"]}
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAAA,6DAAuD;AAA9C,qHAAA,gBAAgB,OAAA;AAEzB,2DAGmC;AAFjC,uHAAA,0BAA0B,OAAA;AAC1B,+HAAA,kCAAkC,OAAA;AAapC,6DAMoC;AALlC,iHAAA,mBAAmB,OAAA;AACnB,8GAAA,gBAAgB,OAAA;AAChB,yGAAA,WAAW,OAAA;AACX,8GAAA,gBAAgB,OAAA;AAChB,8GAAA,gBAAgB,OAAA;AA4BlB,qCAAsC;AAA7B,oGAAA,WAAW,OAAA;AAEpB,qCAOiB;AANf,kGAAA,SAAS,OAAA;AACT,kGAAA,SAAS,OAAA;AACT,gGAAA,OAAO,OAAA;AACP,sGAAA,aAAa,OAAA;AACb,yGAAA,gBAAgB,OAAA;AAChB,+GAAA,sBAAsB,OAAA;AAGxB,qDAK4B;AAJ1B,qGAAA,OAAO,OAAA;AACP,yGAAA,WAAW,OAAA;AACX,+GAAA,iBAAiB,OAAA;AACjB,uGAAA,SAAS,OAAA;AAGX,iDAc4B;AAb1B,kHAAA,wBAAwB,OAAA;AACxB,wGAAA,cAAc,OAAA;AACd,gHAAA,sBAAsB,OAAA;AACtB,sHAAA,4BAA4B,OAAA;AAC5B,uIAAA,6CAA6C,OAAA;AAC7C,uHAAA,6BAA6B,OAAA;AAC7B,4GAAA,kBAAkB,OAAA;AAClB,6GAAA,mBAAmB,OAAA;AACnB,mHAAA,yBAAyB,OAAA;AACzB,yHAAA,+BAA+B,OAAA;AAC/B,yHAAA,+BAA+B,OAAA;AAC/B,iHAAA,uBAAuB,OAAA;AACvB,kHAAA,wBAAwB,OAAA;AAK1B,iDAS4B;AAJ1B;;GAEG;AACH,yHAAA,+BAA+B,OAAA;AAGjC,+CAA0D;AAAjD,8GAAA,qBAAqB,OAAA;AAE9B,2DAA+E;AAAtE,8GAAA,iBAAiB,OAAA;AAAE,4GAAA,eAAe,OAAA;AAE3C,6CASwB;AARtB,6GAAA,mBAAmB,OAAA;AACnB,mGAAA,SAAS,OAAA;AACT,yGAAA,eAAe,OAAA;AACf,yGAAA,eAAe,OAAA;AACf,0GAAA,gBAAgB,OAAA;AAChB,kHAAA,wBAAwB,OAAA;AACxB,yHAAA,+BAA+B,OAAA;AAC/B,sGAAA,YAAY,OAAA;AAGd,2CAIuB;AAHrB,4GAAA,mBAAmB,OAAA;AACnB,2GAAA,kBAAkB,OAAA;AAClB,+GAAA,sBAAsB,OAAA;AAGxB,+CAAuD;AAA9C,+GAAA,oBAAoB,OAAA;AAE7B,2CAAkD;AAAzC,0GAAA,iBAAiB,OAAA;AAE1B,+DAKiC;AAJ/B,sHAAA,mBAAmB,OAAA;AACnB,qHAAA,kBAAkB,OAAA;AAClB,+HAAA,4BAA4B,OAAA;AAC5B,yHAAA,sBAAsB,OAAA;AAGxB,6CAQqB;AAPnB,+GAAA,kBAAkB,OAAA;AAClB,4HAAA,+BAA+B,OAAA;AAE/B,kIAAA,qCAAqC,OAAA;AACrC,iHAAA,oBAAoB,OAAA;AACpB,qHAAA,wBAAwB,OAAA;AACxB,sIAAA,yCAAyC,OAAA;AAG3C,iDAAiE;AAAxD,qHAAA,2BAA2B,OAAA;AAEpC,2DAA8D;AAArD,sHAAA,qBAAqB,OAAA;AAE9B,iDAA2D;AAAlD,mHAAA,uBAAuB,OAAA","sourcesContent":["export { BridgeController } from './bridge-controller';\n\nexport {\n UnifiedSwapBridgeEventName,\n UNIFIED_SWAP_BRIDGE_EVENT_CATEGORY,\n} from './utils/metrics/constants';\n\nexport type {\n RequiredEventContextFromClient,\n CrossChainSwapsEventProperties,\n TradeData,\n RequestParams,\n RequestMetadata,\n TxStatusData,\n QuoteFetchData,\n} from './utils/metrics/types';\n\nexport {\n formatProviderLabel,\n getRequestParams,\n getSwapType,\n isHardwareWallet,\n isCustomSlippage,\n} from './utils/metrics/properties';\n\nexport type {\n ChainConfiguration,\n L1GasFees,\n SolanaFees,\n QuoteMetadata,\n GasMultiplierByChainId,\n FeatureFlagResponse,\n BridgeAsset,\n GenericQuoteRequest,\n Protocol,\n TokenAmountValues,\n Step,\n RefuelData,\n Quote,\n QuoteResponse,\n FeeData,\n TxData,\n BridgeControllerState,\n BridgeControllerAction,\n BridgeControllerActions,\n BridgeControllerEvents,\n BridgeControllerMessenger,\n FeatureFlagsPlatformConfig,\n} from './types';\n\nexport { StatusTypes } from './types';\n\nexport {\n AssetType,\n SortOrder,\n ChainId,\n RequestStatus,\n BridgeUserAction,\n BridgeBackgroundAction,\n} from './types';\n\nexport {\n FeeType,\n ActionTypes,\n BridgeAssetSchema,\n FeatureId,\n} from './utils/validators';\n\nexport {\n ALLOWED_BRIDGE_CHAIN_IDS,\n BridgeClientId,\n BRIDGE_CONTROLLER_NAME,\n BRIDGE_QUOTE_MAX_ETA_SECONDS,\n BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE,\n BRIDGE_PREFERRED_GAS_ESTIMATE,\n BRIDGE_MM_FEE_RATE,\n REFRESH_INTERVAL_MS,\n DEFAULT_MAX_REFRESH_COUNT,\n DEFAULT_BRIDGE_CONTROLLER_STATE,\n METABRIDGE_CHAIN_TO_ADDRESS_MAP,\n BRIDGE_DEV_API_BASE_URL,\n BRIDGE_PROD_API_BASE_URL,\n} from './constants/bridge';\n\nexport type { AllowedBridgeChainIds } from './constants/bridge';\n\nexport {\n /**\n * @deprecated This type should not be used. Use {@link BridgeAsset} instead.\n */\n type SwapsTokenObject,\n /**\n * @deprecated This map should not be used. Use getNativeAssetForChainId\" } instead.\n */\n SWAPS_CHAINID_DEFAULT_TOKEN_MAP,\n} from './constants/tokens';\n\nexport { SWAPS_API_V2_BASE_URL } from './constants/swaps';\n\nexport { MetricsActionType, MetricsSwapType } from './utils/metrics/constants';\n\nexport {\n getEthUsdtResetData,\n isEthUsdt,\n isNativeAddress,\n isSolanaChainId,\n isBitcoinChainId,\n getNativeAssetForChainId,\n getDefaultBridgeControllerState,\n isCrossChain,\n} from './utils/bridge';\n\nexport {\n isValidQuoteRequest,\n formatEtaInMinutes,\n calcSlippagePercentage,\n} from './utils/quote';\n\nexport { calcLatestSrcBalance } from './utils/balance';\n\nexport { fetchBridgeTokens } from './utils/fetch';\n\nexport {\n formatChainIdToCaip,\n formatChainIdToHex,\n formatAddressToCaipReference,\n formatAddressToAssetId,\n} from './utils/caip-formatters';\n\nexport {\n selectBridgeQuotes,\n selectDefaultSlippagePercentage,\n type BridgeAppState,\n selectExchangeRateByChainIdAndAddress,\n selectIsQuoteExpired,\n selectBridgeFeatureFlags,\n selectMinimumBalanceForRentExemptionInSOL,\n} from './selectors';\n\nexport { DEFAULT_FEATURE_FLAG_CONFIG } from './constants/bridge';\n\nexport { getBridgeFeatureFlags } from './utils/feature-flags';\n\nexport { BRIDGE_DEFAULT_SLIPPAGE } from './utils/slippage';\n"]}
package/dist/index.d.cts CHANGED
@@ -6,7 +6,7 @@ export type { ChainConfiguration, L1GasFees, SolanaFees, QuoteMetadata, GasMulti
6
6
  export { StatusTypes } from "./types.cjs";
7
7
  export { AssetType, SortOrder, ChainId, RequestStatus, BridgeUserAction, BridgeBackgroundAction, } from "./types.cjs";
8
8
  export { FeeType, ActionTypes, BridgeAssetSchema, FeatureId, } from "./utils/validators.cjs";
9
- export { ALLOWED_BRIDGE_CHAIN_IDS, BridgeClientId, BRIDGE_CONTROLLER_NAME, BRIDGE_QUOTE_MAX_ETA_SECONDS, BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE, BRIDGE_PREFERRED_GAS_ESTIMATE, BRIDGE_DEFAULT_SLIPPAGE, BRIDGE_MM_FEE_RATE, REFRESH_INTERVAL_MS, DEFAULT_MAX_REFRESH_COUNT, DEFAULT_BRIDGE_CONTROLLER_STATE, METABRIDGE_CHAIN_TO_ADDRESS_MAP, BRIDGE_DEV_API_BASE_URL, BRIDGE_PROD_API_BASE_URL, } from "./constants/bridge.cjs";
9
+ export { ALLOWED_BRIDGE_CHAIN_IDS, BridgeClientId, BRIDGE_CONTROLLER_NAME, BRIDGE_QUOTE_MAX_ETA_SECONDS, BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE, BRIDGE_PREFERRED_GAS_ESTIMATE, BRIDGE_MM_FEE_RATE, REFRESH_INTERVAL_MS, DEFAULT_MAX_REFRESH_COUNT, DEFAULT_BRIDGE_CONTROLLER_STATE, METABRIDGE_CHAIN_TO_ADDRESS_MAP, BRIDGE_DEV_API_BASE_URL, BRIDGE_PROD_API_BASE_URL, } from "./constants/bridge.cjs";
10
10
  export type { AllowedBridgeChainIds } from "./constants/bridge.cjs";
11
11
  export {
12
12
  /**
@@ -24,7 +24,8 @@ export { isValidQuoteRequest, formatEtaInMinutes, calcSlippagePercentage, } from
24
24
  export { calcLatestSrcBalance } from "./utils/balance.cjs";
25
25
  export { fetchBridgeTokens } from "./utils/fetch.cjs";
26
26
  export { formatChainIdToCaip, formatChainIdToHex, formatAddressToCaipReference, formatAddressToAssetId, } from "./utils/caip-formatters.cjs";
27
- export { selectBridgeQuotes, type BridgeAppState, selectExchangeRateByChainIdAndAddress, selectIsQuoteExpired, selectBridgeFeatureFlags, selectMinimumBalanceForRentExemptionInSOL, } from "./selectors.cjs";
27
+ export { selectBridgeQuotes, selectDefaultSlippagePercentage, type BridgeAppState, selectExchangeRateByChainIdAndAddress, selectIsQuoteExpired, selectBridgeFeatureFlags, selectMinimumBalanceForRentExemptionInSOL, } from "./selectors.cjs";
28
28
  export { DEFAULT_FEATURE_FLAG_CONFIG } from "./constants/bridge.cjs";
29
29
  export { getBridgeFeatureFlags } from "./utils/feature-flags.cjs";
30
+ export { BRIDGE_DEFAULT_SLIPPAGE } from "./utils/slippage.cjs";
30
31
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gCAA4B;AAEvD,OAAO,EACL,0BAA0B,EAC1B,kCAAkC,GACnC,sCAAkC;AAEnC,YAAY,EACV,8BAA8B,EAC9B,8BAA8B,EAC9B,SAAS,EACT,aAAa,EACb,eAAe,EACf,YAAY,EACZ,cAAc,GACf,kCAA8B;AAE/B,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,gBAAgB,GACjB,uCAAmC;AAEpC,YAAY,EACV,kBAAkB,EAClB,SAAS,EACT,UAAU,EACV,aAAa,EACb,sBAAsB,EACtB,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,QAAQ,EACR,iBAAiB,EACjB,IAAI,EACJ,UAAU,EACV,KAAK,EACL,aAAa,EACb,OAAO,EACP,MAAM,EACN,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,GAC3B,oBAAgB;AAEjB,OAAO,EAAE,WAAW,EAAE,oBAAgB;AAEtC,OAAO,EACL,SAAS,EACT,SAAS,EACT,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,sBAAsB,GACvB,oBAAgB;AAEjB,OAAO,EACL,OAAO,EACP,WAAW,EACX,iBAAiB,EACjB,SAAS,GACV,+BAA2B;AAE5B,OAAO,EACL,wBAAwB,EACxB,cAAc,EACd,sBAAsB,EACtB,4BAA4B,EAC5B,6CAA6C,EAC7C,6BAA6B,EAC7B,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,+BAA+B,EAC/B,+BAA+B,EAC/B,uBAAuB,EACvB,wBAAwB,GACzB,+BAA2B;AAE5B,YAAY,EAAE,qBAAqB,EAAE,+BAA2B;AAEhE,OAAO;AACL;;GAEG;AACH,KAAK,gBAAgB;AACrB;;GAEG;AACH,+BAA+B,GAChC,+BAA2B;AAE5B,OAAO,EAAE,qBAAqB,EAAE,8BAA0B;AAE1D,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,sCAAkC;AAE/E,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,wBAAwB,EACxB,+BAA+B,EAC/B,YAAY,GACb,2BAAuB;AAExB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,GACvB,0BAAsB;AAEvB,OAAO,EAAE,oBAAoB,EAAE,4BAAwB;AAEvD,OAAO,EAAE,iBAAiB,EAAE,0BAAsB;AAElD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,4BAA4B,EAC5B,sBAAsB,GACvB,oCAAgC;AAEjC,OAAO,EACL,kBAAkB,EAClB,KAAK,cAAc,EACnB,qCAAqC,EACrC,oBAAoB,EACpB,wBAAwB,EACxB,yCAAyC,GAC1C,wBAAoB;AAErB,OAAO,EAAE,2BAA2B,EAAE,+BAA2B;AAEjE,OAAO,EAAE,qBAAqB,EAAE,kCAA8B"}
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gCAA4B;AAEvD,OAAO,EACL,0BAA0B,EAC1B,kCAAkC,GACnC,sCAAkC;AAEnC,YAAY,EACV,8BAA8B,EAC9B,8BAA8B,EAC9B,SAAS,EACT,aAAa,EACb,eAAe,EACf,YAAY,EACZ,cAAc,GACf,kCAA8B;AAE/B,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,gBAAgB,GACjB,uCAAmC;AAEpC,YAAY,EACV,kBAAkB,EAClB,SAAS,EACT,UAAU,EACV,aAAa,EACb,sBAAsB,EACtB,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,QAAQ,EACR,iBAAiB,EACjB,IAAI,EACJ,UAAU,EACV,KAAK,EACL,aAAa,EACb,OAAO,EACP,MAAM,EACN,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,GAC3B,oBAAgB;AAEjB,OAAO,EAAE,WAAW,EAAE,oBAAgB;AAEtC,OAAO,EACL,SAAS,EACT,SAAS,EACT,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,sBAAsB,GACvB,oBAAgB;AAEjB,OAAO,EACL,OAAO,EACP,WAAW,EACX,iBAAiB,EACjB,SAAS,GACV,+BAA2B;AAE5B,OAAO,EACL,wBAAwB,EACxB,cAAc,EACd,sBAAsB,EACtB,4BAA4B,EAC5B,6CAA6C,EAC7C,6BAA6B,EAC7B,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,+BAA+B,EAC/B,+BAA+B,EAC/B,uBAAuB,EACvB,wBAAwB,GACzB,+BAA2B;AAE5B,YAAY,EAAE,qBAAqB,EAAE,+BAA2B;AAEhE,OAAO;AACL;;GAEG;AACH,KAAK,gBAAgB;AACrB;;GAEG;AACH,+BAA+B,GAChC,+BAA2B;AAE5B,OAAO,EAAE,qBAAqB,EAAE,8BAA0B;AAE1D,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,sCAAkC;AAE/E,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,wBAAwB,EACxB,+BAA+B,EAC/B,YAAY,GACb,2BAAuB;AAExB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,GACvB,0BAAsB;AAEvB,OAAO,EAAE,oBAAoB,EAAE,4BAAwB;AAEvD,OAAO,EAAE,iBAAiB,EAAE,0BAAsB;AAElD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,4BAA4B,EAC5B,sBAAsB,GACvB,oCAAgC;AAEjC,OAAO,EACL,kBAAkB,EAClB,+BAA+B,EAC/B,KAAK,cAAc,EACnB,qCAAqC,EACrC,oBAAoB,EACpB,wBAAwB,EACxB,yCAAyC,GAC1C,wBAAoB;AAErB,OAAO,EAAE,2BAA2B,EAAE,+BAA2B;AAEjE,OAAO,EAAE,qBAAqB,EAAE,kCAA8B;AAE9D,OAAO,EAAE,uBAAuB,EAAE,6BAAyB"}
package/dist/index.d.mts CHANGED
@@ -6,7 +6,7 @@ export type { ChainConfiguration, L1GasFees, SolanaFees, QuoteMetadata, GasMulti
6
6
  export { StatusTypes } from "./types.mjs";
7
7
  export { AssetType, SortOrder, ChainId, RequestStatus, BridgeUserAction, BridgeBackgroundAction, } from "./types.mjs";
8
8
  export { FeeType, ActionTypes, BridgeAssetSchema, FeatureId, } from "./utils/validators.mjs";
9
- export { ALLOWED_BRIDGE_CHAIN_IDS, BridgeClientId, BRIDGE_CONTROLLER_NAME, BRIDGE_QUOTE_MAX_ETA_SECONDS, BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE, BRIDGE_PREFERRED_GAS_ESTIMATE, BRIDGE_DEFAULT_SLIPPAGE, BRIDGE_MM_FEE_RATE, REFRESH_INTERVAL_MS, DEFAULT_MAX_REFRESH_COUNT, DEFAULT_BRIDGE_CONTROLLER_STATE, METABRIDGE_CHAIN_TO_ADDRESS_MAP, BRIDGE_DEV_API_BASE_URL, BRIDGE_PROD_API_BASE_URL, } from "./constants/bridge.mjs";
9
+ export { ALLOWED_BRIDGE_CHAIN_IDS, BridgeClientId, BRIDGE_CONTROLLER_NAME, BRIDGE_QUOTE_MAX_ETA_SECONDS, BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE, BRIDGE_PREFERRED_GAS_ESTIMATE, BRIDGE_MM_FEE_RATE, REFRESH_INTERVAL_MS, DEFAULT_MAX_REFRESH_COUNT, DEFAULT_BRIDGE_CONTROLLER_STATE, METABRIDGE_CHAIN_TO_ADDRESS_MAP, BRIDGE_DEV_API_BASE_URL, BRIDGE_PROD_API_BASE_URL, } from "./constants/bridge.mjs";
10
10
  export type { AllowedBridgeChainIds } from "./constants/bridge.mjs";
11
11
  export {
12
12
  /**
@@ -24,7 +24,8 @@ export { isValidQuoteRequest, formatEtaInMinutes, calcSlippagePercentage, } from
24
24
  export { calcLatestSrcBalance } from "./utils/balance.mjs";
25
25
  export { fetchBridgeTokens } from "./utils/fetch.mjs";
26
26
  export { formatChainIdToCaip, formatChainIdToHex, formatAddressToCaipReference, formatAddressToAssetId, } from "./utils/caip-formatters.mjs";
27
- export { selectBridgeQuotes, type BridgeAppState, selectExchangeRateByChainIdAndAddress, selectIsQuoteExpired, selectBridgeFeatureFlags, selectMinimumBalanceForRentExemptionInSOL, } from "./selectors.mjs";
27
+ export { selectBridgeQuotes, selectDefaultSlippagePercentage, type BridgeAppState, selectExchangeRateByChainIdAndAddress, selectIsQuoteExpired, selectBridgeFeatureFlags, selectMinimumBalanceForRentExemptionInSOL, } from "./selectors.mjs";
28
28
  export { DEFAULT_FEATURE_FLAG_CONFIG } from "./constants/bridge.mjs";
29
29
  export { getBridgeFeatureFlags } from "./utils/feature-flags.mjs";
30
+ export { BRIDGE_DEFAULT_SLIPPAGE } from "./utils/slippage.mjs";
30
31
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gCAA4B;AAEvD,OAAO,EACL,0BAA0B,EAC1B,kCAAkC,GACnC,sCAAkC;AAEnC,YAAY,EACV,8BAA8B,EAC9B,8BAA8B,EAC9B,SAAS,EACT,aAAa,EACb,eAAe,EACf,YAAY,EACZ,cAAc,GACf,kCAA8B;AAE/B,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,gBAAgB,GACjB,uCAAmC;AAEpC,YAAY,EACV,kBAAkB,EAClB,SAAS,EACT,UAAU,EACV,aAAa,EACb,sBAAsB,EACtB,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,QAAQ,EACR,iBAAiB,EACjB,IAAI,EACJ,UAAU,EACV,KAAK,EACL,aAAa,EACb,OAAO,EACP,MAAM,EACN,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,GAC3B,oBAAgB;AAEjB,OAAO,EAAE,WAAW,EAAE,oBAAgB;AAEtC,OAAO,EACL,SAAS,EACT,SAAS,EACT,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,sBAAsB,GACvB,oBAAgB;AAEjB,OAAO,EACL,OAAO,EACP,WAAW,EACX,iBAAiB,EACjB,SAAS,GACV,+BAA2B;AAE5B,OAAO,EACL,wBAAwB,EACxB,cAAc,EACd,sBAAsB,EACtB,4BAA4B,EAC5B,6CAA6C,EAC7C,6BAA6B,EAC7B,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,+BAA+B,EAC/B,+BAA+B,EAC/B,uBAAuB,EACvB,wBAAwB,GACzB,+BAA2B;AAE5B,YAAY,EAAE,qBAAqB,EAAE,+BAA2B;AAEhE,OAAO;AACL;;GAEG;AACH,KAAK,gBAAgB;AACrB;;GAEG;AACH,+BAA+B,GAChC,+BAA2B;AAE5B,OAAO,EAAE,qBAAqB,EAAE,8BAA0B;AAE1D,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,sCAAkC;AAE/E,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,wBAAwB,EACxB,+BAA+B,EAC/B,YAAY,GACb,2BAAuB;AAExB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,GACvB,0BAAsB;AAEvB,OAAO,EAAE,oBAAoB,EAAE,4BAAwB;AAEvD,OAAO,EAAE,iBAAiB,EAAE,0BAAsB;AAElD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,4BAA4B,EAC5B,sBAAsB,GACvB,oCAAgC;AAEjC,OAAO,EACL,kBAAkB,EAClB,KAAK,cAAc,EACnB,qCAAqC,EACrC,oBAAoB,EACpB,wBAAwB,EACxB,yCAAyC,GAC1C,wBAAoB;AAErB,OAAO,EAAE,2BAA2B,EAAE,+BAA2B;AAEjE,OAAO,EAAE,qBAAqB,EAAE,kCAA8B"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gCAA4B;AAEvD,OAAO,EACL,0BAA0B,EAC1B,kCAAkC,GACnC,sCAAkC;AAEnC,YAAY,EACV,8BAA8B,EAC9B,8BAA8B,EAC9B,SAAS,EACT,aAAa,EACb,eAAe,EACf,YAAY,EACZ,cAAc,GACf,kCAA8B;AAE/B,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,gBAAgB,GACjB,uCAAmC;AAEpC,YAAY,EACV,kBAAkB,EAClB,SAAS,EACT,UAAU,EACV,aAAa,EACb,sBAAsB,EACtB,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,QAAQ,EACR,iBAAiB,EACjB,IAAI,EACJ,UAAU,EACV,KAAK,EACL,aAAa,EACb,OAAO,EACP,MAAM,EACN,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,GAC3B,oBAAgB;AAEjB,OAAO,EAAE,WAAW,EAAE,oBAAgB;AAEtC,OAAO,EACL,SAAS,EACT,SAAS,EACT,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,sBAAsB,GACvB,oBAAgB;AAEjB,OAAO,EACL,OAAO,EACP,WAAW,EACX,iBAAiB,EACjB,SAAS,GACV,+BAA2B;AAE5B,OAAO,EACL,wBAAwB,EACxB,cAAc,EACd,sBAAsB,EACtB,4BAA4B,EAC5B,6CAA6C,EAC7C,6BAA6B,EAC7B,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,+BAA+B,EAC/B,+BAA+B,EAC/B,uBAAuB,EACvB,wBAAwB,GACzB,+BAA2B;AAE5B,YAAY,EAAE,qBAAqB,EAAE,+BAA2B;AAEhE,OAAO;AACL;;GAEG;AACH,KAAK,gBAAgB;AACrB;;GAEG;AACH,+BAA+B,GAChC,+BAA2B;AAE5B,OAAO,EAAE,qBAAqB,EAAE,8BAA0B;AAE1D,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,sCAAkC;AAE/E,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,wBAAwB,EACxB,+BAA+B,EAC/B,YAAY,GACb,2BAAuB;AAExB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,GACvB,0BAAsB;AAEvB,OAAO,EAAE,oBAAoB,EAAE,4BAAwB;AAEvD,OAAO,EAAE,iBAAiB,EAAE,0BAAsB;AAElD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,4BAA4B,EAC5B,sBAAsB,GACvB,oCAAgC;AAEjC,OAAO,EACL,kBAAkB,EAClB,+BAA+B,EAC/B,KAAK,cAAc,EACnB,qCAAqC,EACrC,oBAAoB,EACpB,wBAAwB,EACxB,yCAAyC,GAC1C,wBAAoB;AAErB,OAAO,EAAE,2BAA2B,EAAE,+BAA2B;AAEjE,OAAO,EAAE,qBAAqB,EAAE,kCAA8B;AAE9D,OAAO,EAAE,uBAAuB,EAAE,6BAAyB"}
package/dist/index.mjs CHANGED
@@ -4,7 +4,7 @@ export { formatProviderLabel, getRequestParams, getSwapType, isHardwareWallet, i
4
4
  export { StatusTypes } from "./types.mjs";
5
5
  export { AssetType, SortOrder, ChainId, RequestStatus, BridgeUserAction, BridgeBackgroundAction } from "./types.mjs";
6
6
  export { FeeType, ActionTypes, BridgeAssetSchema, FeatureId } from "./utils/validators.mjs";
7
- export { ALLOWED_BRIDGE_CHAIN_IDS, BridgeClientId, BRIDGE_CONTROLLER_NAME, BRIDGE_QUOTE_MAX_ETA_SECONDS, BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE, BRIDGE_PREFERRED_GAS_ESTIMATE, BRIDGE_DEFAULT_SLIPPAGE, BRIDGE_MM_FEE_RATE, REFRESH_INTERVAL_MS, DEFAULT_MAX_REFRESH_COUNT, DEFAULT_BRIDGE_CONTROLLER_STATE, METABRIDGE_CHAIN_TO_ADDRESS_MAP, BRIDGE_DEV_API_BASE_URL, BRIDGE_PROD_API_BASE_URL } from "./constants/bridge.mjs";
7
+ export { ALLOWED_BRIDGE_CHAIN_IDS, BridgeClientId, BRIDGE_CONTROLLER_NAME, BRIDGE_QUOTE_MAX_ETA_SECONDS, BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE, BRIDGE_PREFERRED_GAS_ESTIMATE, BRIDGE_MM_FEE_RATE, REFRESH_INTERVAL_MS, DEFAULT_MAX_REFRESH_COUNT, DEFAULT_BRIDGE_CONTROLLER_STATE, METABRIDGE_CHAIN_TO_ADDRESS_MAP, BRIDGE_DEV_API_BASE_URL, BRIDGE_PROD_API_BASE_URL } from "./constants/bridge.mjs";
8
8
  export {
9
9
  /**
10
10
  * @deprecated This map should not be used. Use getNativeAssetForChainId" } instead.
@@ -17,7 +17,8 @@ export { isValidQuoteRequest, formatEtaInMinutes, calcSlippagePercentage } from
17
17
  export { calcLatestSrcBalance } from "./utils/balance.mjs";
18
18
  export { fetchBridgeTokens } from "./utils/fetch.mjs";
19
19
  export { formatChainIdToCaip, formatChainIdToHex, formatAddressToCaipReference, formatAddressToAssetId } from "./utils/caip-formatters.mjs";
20
- export { selectBridgeQuotes, selectExchangeRateByChainIdAndAddress, selectIsQuoteExpired, selectBridgeFeatureFlags, selectMinimumBalanceForRentExemptionInSOL } from "./selectors.mjs";
20
+ export { selectBridgeQuotes, selectDefaultSlippagePercentage, selectExchangeRateByChainIdAndAddress, selectIsQuoteExpired, selectBridgeFeatureFlags, selectMinimumBalanceForRentExemptionInSOL } from "./selectors.mjs";
21
21
  export { DEFAULT_FEATURE_FLAG_CONFIG } from "./constants/bridge.mjs";
22
22
  export { getBridgeFeatureFlags } from "./utils/feature-flags.mjs";
23
+ export { BRIDGE_DEFAULT_SLIPPAGE } from "./utils/slippage.mjs";
23
24
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gCAA4B;AAEvD,OAAO,EACL,0BAA0B,EAC1B,kCAAkC,EACnC,sCAAkC;AAYnC,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EACjB,uCAAmC;AA2BpC,OAAO,EAAE,WAAW,EAAE,oBAAgB;AAEtC,OAAO,EACL,SAAS,EACT,SAAS,EACT,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,sBAAsB,EACvB,oBAAgB;AAEjB,OAAO,EACL,OAAO,EACP,WAAW,EACX,iBAAiB,EACjB,SAAS,EACV,+BAA2B;AAE5B,OAAO,EACL,wBAAwB,EACxB,cAAc,EACd,sBAAsB,EACtB,4BAA4B,EAC5B,6CAA6C,EAC7C,6BAA6B,EAC7B,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,+BAA+B,EAC/B,+BAA+B,EAC/B,uBAAuB,EACvB,wBAAwB,EACzB,+BAA2B;AAI5B,OAAO;AAKL;;GAEG;AACH,+BAA+B,EAChC,+BAA2B;AAE5B,OAAO,EAAE,qBAAqB,EAAE,8BAA0B;AAE1D,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,sCAAkC;AAE/E,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,wBAAwB,EACxB,+BAA+B,EAC/B,YAAY,EACb,2BAAuB;AAExB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACvB,0BAAsB;AAEvB,OAAO,EAAE,oBAAoB,EAAE,4BAAwB;AAEvD,OAAO,EAAE,iBAAiB,EAAE,0BAAsB;AAElD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,4BAA4B,EAC5B,sBAAsB,EACvB,oCAAgC;AAEjC,OAAO,EACL,kBAAkB,EAElB,qCAAqC,EACrC,oBAAoB,EACpB,wBAAwB,EACxB,yCAAyC,EAC1C,wBAAoB;AAErB,OAAO,EAAE,2BAA2B,EAAE,+BAA2B;AAEjE,OAAO,EAAE,qBAAqB,EAAE,kCAA8B","sourcesContent":["export { BridgeController } from './bridge-controller';\n\nexport {\n UnifiedSwapBridgeEventName,\n UNIFIED_SWAP_BRIDGE_EVENT_CATEGORY,\n} from './utils/metrics/constants';\n\nexport type {\n RequiredEventContextFromClient,\n CrossChainSwapsEventProperties,\n TradeData,\n RequestParams,\n RequestMetadata,\n TxStatusData,\n QuoteFetchData,\n} from './utils/metrics/types';\n\nexport {\n formatProviderLabel,\n getRequestParams,\n getSwapType,\n isHardwareWallet,\n isCustomSlippage,\n} from './utils/metrics/properties';\n\nexport type {\n ChainConfiguration,\n L1GasFees,\n SolanaFees,\n QuoteMetadata,\n GasMultiplierByChainId,\n FeatureFlagResponse,\n BridgeAsset,\n GenericQuoteRequest,\n Protocol,\n TokenAmountValues,\n Step,\n RefuelData,\n Quote,\n QuoteResponse,\n FeeData,\n TxData,\n BridgeControllerState,\n BridgeControllerAction,\n BridgeControllerActions,\n BridgeControllerEvents,\n BridgeControllerMessenger,\n FeatureFlagsPlatformConfig,\n} from './types';\n\nexport { StatusTypes } from './types';\n\nexport {\n AssetType,\n SortOrder,\n ChainId,\n RequestStatus,\n BridgeUserAction,\n BridgeBackgroundAction,\n} from './types';\n\nexport {\n FeeType,\n ActionTypes,\n BridgeAssetSchema,\n FeatureId,\n} from './utils/validators';\n\nexport {\n ALLOWED_BRIDGE_CHAIN_IDS,\n BridgeClientId,\n BRIDGE_CONTROLLER_NAME,\n BRIDGE_QUOTE_MAX_ETA_SECONDS,\n BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE,\n BRIDGE_PREFERRED_GAS_ESTIMATE,\n BRIDGE_DEFAULT_SLIPPAGE,\n BRIDGE_MM_FEE_RATE,\n REFRESH_INTERVAL_MS,\n DEFAULT_MAX_REFRESH_COUNT,\n DEFAULT_BRIDGE_CONTROLLER_STATE,\n METABRIDGE_CHAIN_TO_ADDRESS_MAP,\n BRIDGE_DEV_API_BASE_URL,\n BRIDGE_PROD_API_BASE_URL,\n} from './constants/bridge';\n\nexport type { AllowedBridgeChainIds } from './constants/bridge';\n\nexport {\n /**\n * @deprecated This type should not be used. Use {@link BridgeAsset} instead.\n */\n type SwapsTokenObject,\n /**\n * @deprecated This map should not be used. Use getNativeAssetForChainId\" } instead.\n */\n SWAPS_CHAINID_DEFAULT_TOKEN_MAP,\n} from './constants/tokens';\n\nexport { SWAPS_API_V2_BASE_URL } from './constants/swaps';\n\nexport { MetricsActionType, MetricsSwapType } from './utils/metrics/constants';\n\nexport {\n getEthUsdtResetData,\n isEthUsdt,\n isNativeAddress,\n isSolanaChainId,\n isBitcoinChainId,\n getNativeAssetForChainId,\n getDefaultBridgeControllerState,\n isCrossChain,\n} from './utils/bridge';\n\nexport {\n isValidQuoteRequest,\n formatEtaInMinutes,\n calcSlippagePercentage,\n} from './utils/quote';\n\nexport { calcLatestSrcBalance } from './utils/balance';\n\nexport { fetchBridgeTokens } from './utils/fetch';\n\nexport {\n formatChainIdToCaip,\n formatChainIdToHex,\n formatAddressToCaipReference,\n formatAddressToAssetId,\n} from './utils/caip-formatters';\n\nexport {\n selectBridgeQuotes,\n type BridgeAppState,\n selectExchangeRateByChainIdAndAddress,\n selectIsQuoteExpired,\n selectBridgeFeatureFlags,\n selectMinimumBalanceForRentExemptionInSOL,\n} from './selectors';\n\nexport { DEFAULT_FEATURE_FLAG_CONFIG } from './constants/bridge';\n\nexport { getBridgeFeatureFlags } from './utils/feature-flags';\n"]}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gCAA4B;AAEvD,OAAO,EACL,0BAA0B,EAC1B,kCAAkC,EACnC,sCAAkC;AAYnC,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EACjB,uCAAmC;AA2BpC,OAAO,EAAE,WAAW,EAAE,oBAAgB;AAEtC,OAAO,EACL,SAAS,EACT,SAAS,EACT,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,sBAAsB,EACvB,oBAAgB;AAEjB,OAAO,EACL,OAAO,EACP,WAAW,EACX,iBAAiB,EACjB,SAAS,EACV,+BAA2B;AAE5B,OAAO,EACL,wBAAwB,EACxB,cAAc,EACd,sBAAsB,EACtB,4BAA4B,EAC5B,6CAA6C,EAC7C,6BAA6B,EAC7B,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,+BAA+B,EAC/B,+BAA+B,EAC/B,uBAAuB,EACvB,wBAAwB,EACzB,+BAA2B;AAI5B,OAAO;AAKL;;GAEG;AACH,+BAA+B,EAChC,+BAA2B;AAE5B,OAAO,EAAE,qBAAqB,EAAE,8BAA0B;AAE1D,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,sCAAkC;AAE/E,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,wBAAwB,EACxB,+BAA+B,EAC/B,YAAY,EACb,2BAAuB;AAExB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACvB,0BAAsB;AAEvB,OAAO,EAAE,oBAAoB,EAAE,4BAAwB;AAEvD,OAAO,EAAE,iBAAiB,EAAE,0BAAsB;AAElD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,4BAA4B,EAC5B,sBAAsB,EACvB,oCAAgC;AAEjC,OAAO,EACL,kBAAkB,EAClB,+BAA+B,EAE/B,qCAAqC,EACrC,oBAAoB,EACpB,wBAAwB,EACxB,yCAAyC,EAC1C,wBAAoB;AAErB,OAAO,EAAE,2BAA2B,EAAE,+BAA2B;AAEjE,OAAO,EAAE,qBAAqB,EAAE,kCAA8B;AAE9D,OAAO,EAAE,uBAAuB,EAAE,6BAAyB","sourcesContent":["export { BridgeController } from './bridge-controller';\n\nexport {\n UnifiedSwapBridgeEventName,\n UNIFIED_SWAP_BRIDGE_EVENT_CATEGORY,\n} from './utils/metrics/constants';\n\nexport type {\n RequiredEventContextFromClient,\n CrossChainSwapsEventProperties,\n TradeData,\n RequestParams,\n RequestMetadata,\n TxStatusData,\n QuoteFetchData,\n} from './utils/metrics/types';\n\nexport {\n formatProviderLabel,\n getRequestParams,\n getSwapType,\n isHardwareWallet,\n isCustomSlippage,\n} from './utils/metrics/properties';\n\nexport type {\n ChainConfiguration,\n L1GasFees,\n SolanaFees,\n QuoteMetadata,\n GasMultiplierByChainId,\n FeatureFlagResponse,\n BridgeAsset,\n GenericQuoteRequest,\n Protocol,\n TokenAmountValues,\n Step,\n RefuelData,\n Quote,\n QuoteResponse,\n FeeData,\n TxData,\n BridgeControllerState,\n BridgeControllerAction,\n BridgeControllerActions,\n BridgeControllerEvents,\n BridgeControllerMessenger,\n FeatureFlagsPlatformConfig,\n} from './types';\n\nexport { StatusTypes } from './types';\n\nexport {\n AssetType,\n SortOrder,\n ChainId,\n RequestStatus,\n BridgeUserAction,\n BridgeBackgroundAction,\n} from './types';\n\nexport {\n FeeType,\n ActionTypes,\n BridgeAssetSchema,\n FeatureId,\n} from './utils/validators';\n\nexport {\n ALLOWED_BRIDGE_CHAIN_IDS,\n BridgeClientId,\n BRIDGE_CONTROLLER_NAME,\n BRIDGE_QUOTE_MAX_ETA_SECONDS,\n BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE,\n BRIDGE_PREFERRED_GAS_ESTIMATE,\n BRIDGE_MM_FEE_RATE,\n REFRESH_INTERVAL_MS,\n DEFAULT_MAX_REFRESH_COUNT,\n DEFAULT_BRIDGE_CONTROLLER_STATE,\n METABRIDGE_CHAIN_TO_ADDRESS_MAP,\n BRIDGE_DEV_API_BASE_URL,\n BRIDGE_PROD_API_BASE_URL,\n} from './constants/bridge';\n\nexport type { AllowedBridgeChainIds } from './constants/bridge';\n\nexport {\n /**\n * @deprecated This type should not be used. Use {@link BridgeAsset} instead.\n */\n type SwapsTokenObject,\n /**\n * @deprecated This map should not be used. Use getNativeAssetForChainId\" } instead.\n */\n SWAPS_CHAINID_DEFAULT_TOKEN_MAP,\n} from './constants/tokens';\n\nexport { SWAPS_API_V2_BASE_URL } from './constants/swaps';\n\nexport { MetricsActionType, MetricsSwapType } from './utils/metrics/constants';\n\nexport {\n getEthUsdtResetData,\n isEthUsdt,\n isNativeAddress,\n isSolanaChainId,\n isBitcoinChainId,\n getNativeAssetForChainId,\n getDefaultBridgeControllerState,\n isCrossChain,\n} from './utils/bridge';\n\nexport {\n isValidQuoteRequest,\n formatEtaInMinutes,\n calcSlippagePercentage,\n} from './utils/quote';\n\nexport { calcLatestSrcBalance } from './utils/balance';\n\nexport { fetchBridgeTokens } from './utils/fetch';\n\nexport {\n formatChainIdToCaip,\n formatChainIdToHex,\n formatAddressToCaipReference,\n formatAddressToAssetId,\n} from './utils/caip-formatters';\n\nexport {\n selectBridgeQuotes,\n selectDefaultSlippagePercentage,\n type BridgeAppState,\n selectExchangeRateByChainIdAndAddress,\n selectIsQuoteExpired,\n selectBridgeFeatureFlags,\n selectMinimumBalanceForRentExemptionInSOL,\n} from './selectors';\n\nexport { DEFAULT_FEATURE_FLAG_CONFIG } from './constants/bridge';\n\nexport { getBridgeFeatureFlags } from './utils/feature-flags';\n\nexport { BRIDGE_DEFAULT_SLIPPAGE } from './utils/slippage';\n"]}