{"version":3,"file":"fetch.mjs","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport { StructError } from '@metamask/superstruct';\nimport type { CaipAssetType, CaipChainId, Hex } from '@metamask/utils';\n\nimport type {\n  QuoteResponseV1,\n  FetchFunction,\n  GenericQuoteRequest,\n  QuoteRequest,\n  BridgeAsset,\n  TokenFeature,\n  QuoteStreamCompleteData,\n  BatchSellTradesRequest,\n  BatchSellTradesResponse,\n  FeatureId,\n} from '../types';\nimport { getEthUsdtResetData } from './bridge';\nimport {\n  formatAddressToAssetId,\n  formatAddressToCaipReference,\n  formatChainIdToDec,\n} from './caip-formatters';\nimport { fetchServerEvents } from './fetch-server-events';\nimport { isEvmTxData } from './trade-utils';\nimport {\n  validateQuoteResponseV1,\n  validateSwapsTokenObject,\n  validateTokenFeature,\n  validateQuoteStreamComplete,\n  validateBatchSellTradesResponse,\n} from './validators';\n\nexport const getClientHeaders = ({\n  clientId,\n  clientVersion,\n  jwt,\n}: {\n  clientId: string;\n  clientVersion?: string;\n  jwt?: string;\n}) => ({\n  'X-Client-Id': clientId,\n  ...(jwt ? { Authorization: `Bearer ${jwt}` } : {}),\n  ...(clientVersion ? { 'Client-Version': clientVersion } : {}),\n});\n\n/**\n * Returns a list of enabled (unblocked) tokens\n *\n * @deprecated Use the popular and search bridge-api endpoints instead\n *\n * @param chainId - The chain ID to fetch tokens for\n * @param clientId - The client ID for metrics\n * @param jwt - The JWT token for authentication\n * @param fetchFn - The fetch function to use\n * @param bridgeApiBaseUrl - The base URL for the bridge API\n * @param clientVersion - The client version for metrics (optional)\n * @returns A list of enabled (unblocked) tokens\n */\nexport async function fetchBridgeTokens(\n  chainId: Hex | CaipChainId,\n  clientId: string,\n  jwt: string | undefined,\n  fetchFn: FetchFunction,\n  bridgeApiBaseUrl: string,\n  clientVersion?: string,\n): Promise<Record<string, BridgeAsset>> {\n  const url = `${bridgeApiBaseUrl}/getTokens?chainId=${formatChainIdToDec(chainId)}`;\n\n  // TODO we will need to cache these. In Extension fetchWithCache is used. This is due to the following:\n  // If we allow selecting dest networks which the user has not imported,\n  // note that the Assets controller won't be able to provide tokens. In extension we fetch+cache the token list from bridge-api to handle this\n  const tokens = await fetchFn(url, {\n    headers: getClientHeaders({ clientId, clientVersion, jwt }),\n  });\n\n  const transformedTokens: Record<string, BridgeAsset> = {};\n  tokens.forEach((token: unknown) => {\n    if (validateSwapsTokenObject(token)) {\n      transformedTokens[token.address] = token;\n    }\n  });\n  return transformedTokens;\n}\n\n/**\n * Converts the generic quote request to QuoteRequest\n *\n * @param request - The quote request\n * @returns A QuoteRequest object\n */\nconst formatQuoteRequest = (request: GenericQuoteRequest): QuoteRequest => {\n  const destWalletAddress = request.destWalletAddress ?? request.walletAddress;\n  // Transform the generic quote request into QuoteRequest\n  const normalizedRequest: QuoteRequest = {\n    walletAddress: formatAddressToCaipReference(request.walletAddress),\n    destWalletAddress: formatAddressToCaipReference(destWalletAddress),\n    srcChainId: formatChainIdToDec(request.srcChainId),\n    destChainId: formatChainIdToDec(request.destChainId),\n    srcTokenAddress: formatAddressToCaipReference(request.srcTokenAddress),\n    destTokenAddress: formatAddressToCaipReference(request.destTokenAddress),\n    srcTokenAmount: request.srcTokenAmount,\n    insufficientBal: Boolean(request.insufficientBal),\n    resetApproval: Boolean(request.resetApproval),\n    gasIncluded: Boolean(request.gasIncluded),\n    gasIncluded7702: Boolean(request.gasIncluded7702),\n  };\n  if (request.slippage !== undefined) {\n    normalizedRequest.slippage = request.slippage;\n  }\n  if (request.fee !== undefined) {\n    normalizedRequest.fee = request.fee;\n  }\n  if (request.aggIds && request.aggIds.length > 0) {\n    normalizedRequest.aggIds = request.aggIds;\n  }\n  if (request.bridgeIds && request.bridgeIds.length > 0) {\n    normalizedRequest.bridgeIds = request.bridgeIds;\n  }\n\n  return normalizedRequest;\n};\n\n/**\n * Converts the generic quote request to the type that the bridge-api expects\n *\n * @param normalizedRequest - The normalized quote request\n * @returns A URLSearchParams object with the query parameters\n */\nconst formatQueryParams = (\n  normalizedRequest: QuoteRequest,\n): URLSearchParams => {\n  const queryParams = new URLSearchParams();\n  Object.entries(normalizedRequest).forEach(([key, value]) => {\n    queryParams.append(key, value.toString());\n  });\n  return queryParams;\n};\n\n/**\n * Fetches quotes from the bridge-api's getQuote endpoint\n *\n * @param request - The quote request\n * @param signal - The abort signal\n * @param clientId - The client ID for metrics\n * @param jwt - The JWT token for authentication\n * @param fetchFn - The fetch function to use\n * @param bridgeApiBaseUrl - The base URL for the bridge API\n * @param featureId - The feature ID to append to each quote\n * @param clientVersion - The client version for metrics (optional)\n * @returns A list of bridge tx quotes\n */\nexport async function fetchBridgeQuotes(\n  request: GenericQuoteRequest,\n  signal: AbortSignal | null,\n  clientId: string,\n  jwt: string | undefined,\n  fetchFn: FetchFunction,\n  bridgeApiBaseUrl: string,\n  featureId: FeatureId | null,\n  clientVersion?: string,\n): Promise<{\n  quotes: QuoteResponseV1[];\n  validationFailures: string[];\n}> {\n  const normalizedRequest = formatQuoteRequest(request);\n  const queryParams = formatQueryParams(normalizedRequest);\n\n  const url = `${bridgeApiBaseUrl}/getQuote?${queryParams}`;\n  const quotes: unknown[] = await fetchFn(url, {\n    headers: getClientHeaders({ clientId, clientVersion, jwt }),\n    signal,\n  });\n\n  const uniqueValidationFailures: Set<string> = new Set<string>([]);\n  const filteredQuotes = quotes\n    .filter((quoteResponse: unknown): quoteResponse is QuoteResponseV1 => {\n      try {\n        return validateQuoteResponseV1(quoteResponse);\n      } catch (error) {\n        if (error instanceof StructError) {\n          error.failures().forEach(({ branch, path }) => {\n            const aggregatorId =\n              branch?.[0]?.quote?.bridgeId ??\n              branch?.[0]?.quote?.bridges?.[0] ??\n              (quoteResponse as QuoteResponseV1)?.quote?.bridgeId ??\n              (quoteResponse as QuoteResponseV1)?.quote?.bridges?.[0] ??\n              'unknown';\n            const pathString = path?.join('.') || 'unknown';\n            uniqueValidationFailures.add([aggregatorId, pathString].join('|'));\n          });\n        }\n        return false;\n      }\n    })\n    .map((quote) => ({\n      ...quote,\n      featureId: featureId ?? undefined,\n      // Append the reset approval data to the quote response if the request\n      // has resetApproval set to true and the quote has an approval\n      resetApproval:\n        request.resetApproval && quote.approval && isEvmTxData(quote.approval)\n          ? {\n              ...quote.approval,\n              data: getEthUsdtResetData(request.destChainId),\n            }\n          : undefined,\n    }));\n\n  const validationFailures = Array.from(uniqueValidationFailures);\n  if (uniqueValidationFailures.size > 0) {\n    console.warn('Quote validation failed', validationFailures);\n  }\n\n  return {\n    quotes: filteredQuotes,\n    validationFailures,\n  };\n}\n\nconst fetchAssetPricesForCurrency = async (request: {\n  currency: string;\n  assetIds: Set<CaipAssetType>;\n  clientId: string;\n  clientVersion?: string;\n  fetchFn: FetchFunction;\n  signal?: AbortSignal;\n}): Promise<Record<CaipAssetType, { [currency: string]: string }>> => {\n  const { currency, assetIds, clientId, clientVersion, fetchFn, signal } =\n    request;\n  const validAssetIds = Array.from(assetIds).filter(Boolean);\n  if (validAssetIds.length === 0) {\n    return {};\n  }\n\n  const queryParams = new URLSearchParams({\n    assetIds: validAssetIds.filter(Boolean).join(','),\n    vsCurrency: currency,\n  });\n  const url = `https://price.api.cx.metamask.io/v3/spot-prices?${queryParams}`;\n  const priceApiResponse = (await fetchFn(url, {\n    headers: getClientHeaders({ clientId, clientVersion }),\n    signal,\n  })) as unknown as Record<CaipAssetType, { [currency: string]: number }>;\n  if (!priceApiResponse || typeof priceApiResponse !== 'object') {\n    return {};\n  }\n\n  return Object.entries(priceApiResponse).reduce<\n    Record<CaipAssetType, { [currency: string]: string }>\n  >((acc, [assetId, currencyToPrice]) => {\n    if (!currencyToPrice) {\n      return acc;\n    }\n    if (!acc[assetId as CaipAssetType]) {\n      acc[assetId as CaipAssetType] = {};\n    }\n    if (currencyToPrice[currency]) {\n      acc[assetId as CaipAssetType][currency] =\n        currencyToPrice[currency].toString();\n    }\n    return acc;\n  }, {});\n};\n\n/**\n * Fetches the asset prices from the price API for multiple currencies\n *\n * @param request - The request object\n * @returns The asset prices by assetId\n */\nexport const fetchAssetPrices = async (\n  request: {\n    currencies: Set<string>;\n  } & Omit<Parameters<typeof fetchAssetPricesForCurrency>[0], 'currency'>,\n): Promise<\n  Record<CaipAssetType, { [currency: string]: string } | undefined>\n> => {\n  const { currencies, ...args } = request;\n\n  const combinedPrices = await Promise.allSettled(\n    Array.from(currencies).map(\n      async (currency) =>\n        await fetchAssetPricesForCurrency({ ...args, currency }),\n    ),\n  ).then((priceApiResponse) => {\n    return priceApiResponse.reduce<\n      Record<CaipAssetType, { [currency: string]: string }>\n    >((acc, result) => {\n      if (result.status === 'fulfilled') {\n        Object.entries(result.value).forEach(([assetId, currencyToPrice]) => {\n          const existingPrices = acc[assetId as CaipAssetType];\n          if (!existingPrices) {\n            acc[assetId as CaipAssetType] = {};\n          }\n          Object.entries(currencyToPrice).forEach(([currency, price]) => {\n            acc[assetId as CaipAssetType][currency] = price;\n          });\n        });\n      }\n      return acc;\n    }, {});\n  });\n\n  return combinedPrices;\n};\n\nconst getQuoteRequestId = ({\n  srcChainId,\n  destChainId,\n  srcTokenAddress,\n  destTokenAddress,\n}: QuoteRequest): string =>\n  `${formatAddressToAssetId(srcTokenAddress, srcChainId)}-${formatAddressToAssetId(destTokenAddress, destChainId)}`;\n\nconst getQuoteResponseId = ({\n  srcAsset: { address: srcTokenAddress, chainId: srcChainId },\n  destAsset: { address: destTokenAddress, chainId: destChainId },\n}: QuoteResponseV1['quote']): string =>\n  `${formatAddressToAssetId(srcTokenAddress, srcChainId)}-${formatAddressToAssetId(destTokenAddress, destChainId)}`;\n\n/**\n * Fetches quotes from the bridge-api\n *\n * @param fetchFn - The fetch function to use\n * @param quoteRequests - An array of GenericQuoteRequest objects\n * @param signal - The abort signal\n * @param featureId - The {@link FeatureId} for the experience that's requesting the quotes\n * @param clientId - The client ID for metrics\n * @param jwt - The JWT token for authentication\n * @param bridgeApiBaseUrl - The base URL for the bridge API\n * @param serverEventHandlers - The server event handlers\n * @param serverEventHandlers.onQuoteValidationFailure - The function to handle quote validation failures\n * @param serverEventHandlers.onValidQuoteReceived - The function to handle valid quotes\n * @param serverEventHandlers.onTokenWarning - The function to handle token warning events\n * @param serverEventHandlers.onComplete - The function to handle the complete event emitted when the stream finishes\n * @param serverEventHandlers.onClose - The function to run when the stream is closed and there are no thrown errors\n * @param clientVersion - The client version for metrics (optional)\n * @returns A list of bridge tx quote promises\n */\nexport async function fetchBridgeQuoteStream(\n  fetchFn: FetchFunction,\n  quoteRequests: GenericQuoteRequest[],\n  signal: AbortSignal | undefined,\n  featureId: FeatureId,\n  clientId: string,\n  jwt: string | undefined,\n  bridgeApiBaseUrl: string,\n  serverEventHandlers: {\n    onClose: () => void | Promise<void>;\n    onQuoteValidationFailure: (validationFailures: string[]) => void;\n    onValidQuoteReceived: (quotes: QuoteResponseV1) => Promise<void>;\n    onTokenWarning: (warning: TokenFeature) => void;\n    onComplete: (data: QuoteStreamCompleteData) => void;\n  },\n  clientVersion?: string,\n): Promise<void> {\n  /**\n   * If the request includes multiple quote requests, it is a batch sell request.\n   * A batch sell consists of multiple swaps that are executed in a single tx submission.\n   */\n  const isBatchSellRequest = quoteRequests.length > 1;\n  const normalizedQuoteRequests = quoteRequests.map(formatQuoteRequest);\n  const quoteRequestIds = isBatchSellRequest\n    ? normalizedQuoteRequests.map(getQuoteRequestId)\n    : undefined;\n\n  const onQuoteReceived = async (quoteResponse: unknown): Promise<void> => {\n    const uniqueValidationFailures: Set<string> = new Set<string>([]);\n\n    try {\n      if (validateQuoteResponseV1(quoteResponse)) {\n        // Fallback to 0 if the quote doesn't match any requests\n        const matchedQuoteRequestIdx = Math.max(\n          quoteRequestIds?.findIndex((id) => {\n            return id === getQuoteResponseId(quoteResponse.quote);\n          }) ?? 0,\n          0,\n        );\n        const matchingQuoteRequest =\n          normalizedQuoteRequests[matchedQuoteRequestIdx];\n\n        return await serverEventHandlers.onValidQuoteReceived({\n          ...quoteResponse,\n          featureId,\n          // Append the reset approval data to the quote response if the request has resetApproval set to true and the quote has an approval\n          resetApproval:\n            matchingQuoteRequest.resetApproval &&\n            quoteResponse.approval &&\n            isEvmTxData(quoteResponse.approval)\n              ? {\n                  ...quoteResponse.approval,\n                  data: getEthUsdtResetData(matchingQuoteRequest.destChainId),\n                }\n              : undefined,\n          ...(isBatchSellRequest && {\n            quoteRequestIndex: matchedQuoteRequestIdx,\n          }),\n        });\n      }\n    } catch (error) {\n      if (error instanceof StructError) {\n        error.failures().forEach(({ branch, path }) => {\n          const aggregatorId =\n            branch?.[0]?.quote?.bridgeId ??\n            branch?.[0]?.quote?.bridges?.[0] ??\n            (quoteResponse as QuoteResponseV1)?.quote?.bridgeId ??\n            ((quoteResponse as QuoteResponseV1)?.quote?.bridges?.[0] ||\n              ('unknown' as string));\n          const pathString = path?.join('.') || 'unknown';\n          uniqueValidationFailures.add([aggregatorId, pathString].join('|'));\n        });\n      }\n      const validationFailures = Array.from(uniqueValidationFailures);\n      if (uniqueValidationFailures.size > 0) {\n        console.warn('Quote validation failed', validationFailures);\n        return serverEventHandlers.onQuoteValidationFailure(validationFailures);\n      }\n      // Rethrow any unexpected errors\n      throw error;\n    }\n    return undefined;\n  };\n\n  const onTokenWarningReceived = (data: unknown): void => {\n    try {\n      if (validateTokenFeature(data)) {\n        serverEventHandlers.onTokenWarning(data);\n      }\n    } catch (error) {\n      console.warn('Token warning validation failed', error);\n    }\n  };\n\n  const onCompleteReceived = (data: unknown): void => {\n    try {\n      if (validateQuoteStreamComplete(data)) {\n        serverEventHandlers.onComplete(data);\n      }\n    } catch (error) {\n      console.warn('Quote stream complete validation failed', error);\n    }\n  };\n\n  const onMessage = async (\n    data: Record<string, unknown>,\n    eventName?: string,\n  ): Promise<void> => {\n    switch (eventName) {\n      case 'quote':\n        return await onQuoteReceived(data);\n      case 'token_warning':\n        return onTokenWarningReceived(data);\n      case 'complete':\n        return onCompleteReceived(data);\n      default:\n        return undefined;\n    }\n  };\n\n  const sharedFetchOptions = {\n    signal,\n    onMessage,\n    onError: (error: unknown) => {\n      // Rethrow error to prevent silent fetch failures\n      throw error;\n    },\n    onClose: async () => {\n      await serverEventHandlers.onClose();\n    },\n    fetchFn,\n  };\n\n  if (isBatchSellRequest) {\n    const urlStream = `${bridgeApiBaseUrl}/getBatchQuoteStream`;\n    await fetchServerEvents(urlStream, {\n      method: 'POST',\n      body: JSON.stringify({ requests: normalizedQuoteRequests }),\n      headers: {\n        ...getClientHeaders({ clientId, clientVersion, jwt }),\n        'Content-Type': 'application/json',\n      },\n      ...sharedFetchOptions,\n    });\n    return;\n  }\n\n  const queryParams = formatQueryParams(normalizedQuoteRequests[0]);\n  const urlStream = `${bridgeApiBaseUrl}/getQuoteStream?${queryParams}`;\n  await fetchServerEvents(urlStream, {\n    headers: {\n      ...getClientHeaders({ clientId, clientVersion, jwt }),\n      'Content-Type': 'text/event-stream',\n    },\n    ...sharedFetchOptions,\n  });\n}\n\nexport const formatBatchSellTradesRequest = (\n  quotes: (QuoteResponseV1 | null)[],\n  stxEnabled: boolean,\n): BatchSellTradesRequest => ({\n  quotes: quotes\n    .filter((quote): quote is QuoteResponseV1 => quote !== null)\n    .map(\n      ({\n        trade,\n        approval,\n        quote,\n        estimatedProcessingTimeInSeconds,\n        quoteId,\n      }) => ({\n        trade,\n        approval,\n        quote,\n        estimatedProcessingTimeInSeconds,\n        quoteId,\n      }),\n    ),\n  stxEnabled,\n});\n\n/**\n * Fetches quotes from the bridge-api's getQuote endpoint\n *\n * @param quotes - The quotes to fetch the gasless transaction data and fees for. May contain null values if a quote is not available for a swap\n * @param stxEnabled - Flag to estimate gas cost more precisely for the batch sell feature.\n * @param signal - The abort signal\n * @param clientId - The client ID for metrics\n * @param jwt - The JWT token for authentication\n * @param fetchFn - The fetch function to use\n * @param bridgeApiBaseUrl - The base URL for the bridge API\n * @param clientVersion - The client version for metrics (optional)\n * @returns The batch sell trades and the total network fee\n */\nexport async function fetchBatchSellTrades(\n  quotes: (QuoteResponseV1 | null)[],\n  stxEnabled: boolean,\n  signal: AbortSignal | null,\n  clientId: string,\n  jwt: string | undefined,\n  fetchFn: FetchFunction,\n  bridgeApiBaseUrl: string,\n  clientVersion?: string,\n): Promise<BatchSellTradesResponse> {\n  const url = `${bridgeApiBaseUrl}/obtainGaslessBatch`;\n  const request: BatchSellTradesRequest = formatBatchSellTradesRequest(\n    quotes,\n    stxEnabled,\n  );\n  const batchSellTradesResponse = await fetchFn(url, {\n    headers: {\n      ...getClientHeaders({\n        clientId,\n        clientVersion,\n        jwt,\n      }),\n      'Content-Type': 'application/json',\n    },\n    signal,\n    method: 'POST',\n    body: JSON.stringify(request),\n  });\n\n  if (!batchSellTradesResponse.ok) {\n    throw new Error(\n      `Failed to fetch batch sell trades. ${batchSellTradesResponse.statusText}`,\n    );\n  }\n\n  try {\n    const data = await batchSellTradesResponse.json();\n    validateBatchSellTradesResponse(data);\n    return data;\n  } catch (error: unknown) {\n    // TODO validation failure event\n    throw new Error(`Invalid batch simulation response. ${error?.toString()}`);\n  }\n}\n"]}