{"version":3,"file":"static/chunks/pages/swap-84c8f58981848611.js","mappings":"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","sources":["webpack://_N_E/?d217","webpack://_N_E/./components/Modal/TokenSelectModal.tsx","webpack://_N_E/./hooks/globalState/useWarningTokens.ts","webpack://_N_E/./utils/routing/types.ts","webpack://_N_E/./utils/routing/utils.ts","webpack://_N_E/./components/Button/SwapBtn/utils.ts","webpack://_N_E/./components/Button/SwapBtn/SwapBtnComponent.tsx","webpack://_N_E/./components/Button/SwapBtn/SwapBtn.tsx","webpack://_N_E/./components/Button/SwapBtn/index.tsx","webpack://_N_E/./helper/fetchHelper/getAutomanClient.ts","webpack://_N_E/./helper/fetchHelper/getQuote.ts","webpack://_N_E/./helper/fetchHelper/index.ts","webpack://_N_E/./views/Swap/index.tsx","webpack://_N_E/./pages/swap.tsx","webpack://_N_E/./views/Swap/style.ts","webpack://_N_E/<anon>"],"sourcesContent":["\n    (window.__NEXT_P = window.__NEXT_P || []).push([\n      \"/swap\",\n      function () {\n        return require(\"private-next-pages/swap.tsx\");\n      }\n    ]);\n    if(module.hot) {\n      module.hot.dispose(function () {\n        window.__NEXT_P.push([\"/swap\"])\n      });\n    }\n  ","import { ITokenSelectContentProps, TokenSelectContent } from \"@aperture/uikit\";\n\nexport const TokenSelectModal: React.FC<ITokenSelectContentProps> = ({\n  commonTokens,\n  selectedToken = null,\n  selectToken,\n  selectUnknownToken,\n  handleUnknownAddress,\n  customClose,\n  onClose,\n}) => {\n  return (\n    <TokenSelectContent\n      commonTokens={commonTokens}\n      selectedToken={selectedToken}\n      selectToken={selectToken}\n      selectUnknownToken={selectUnknownToken}\n      handleUnknownAddress={handleUnknownAddress}\n      customClose={customClose}\n      onClose={onClose}\n    />\n  );\n};\n","import { useAllChainStateStore } from \"@/components/GlobalStore\";\nimport { useNetwork } from \"@/components/NetworkContext/NetworkContext\";\nimport { getPublicClient } from \"@/helper/getPublicClient\";\nimport { viem } from \"@aperture_finance/uniswap-v3-automation-sdk\";\nimport { Token } from \"@uniswap/sdk-core\";\nimport { Address } from \"viem\";\nimport { useEventCallback } from \"../useEventCallback\";\nimport { useFetchUserTokensBalance } from \"../useFetchUserTokensBalance\";\n\nexport type TMutateWarningTokens = (\n  chainId: number,\n  warningTokens: Token | Token[]\n) => Promise<void>;\n\nexport const useMutateWarningTokens = () => {\n  const { networkId } = useNetwork();\n  const { mutate: tokenBalanceMutate } = useFetchUserTokensBalance();\n  const { updateTokenMap } = useAllChainStateStore();\n\n  const mutateWarningTokens: TMutateWarningTokens = useEventCallback(\n    async (chainId, token) => {\n      const tokens = Array.isArray(token) ? token : [token];\n\n      updateTokenMap({\n        chainId: chainId,\n        tokens,\n      });\n\n      if (chainId === networkId) {\n        await tokenBalanceMutate();\n      }\n    }\n  );\n\n  const mutateWarningTokensByAddress = useEventCallback(\n    async (chainId: number, tokenAddress: Address | Address[]) => {\n      const addresses = Array.isArray(tokenAddress)\n        ? tokenAddress\n        : [tokenAddress];\n\n      const tokens = await viem.getBulkTokens(\n        addresses,\n        chainId,\n        getPublicClient(chainId),\n        undefined,\n        true\n      );\n\n      return mutateWarningTokens(chainId, tokens);\n    }\n  );\n\n  return {\n    mutateWarningTokens,\n    mutateWarningTokensByAddress,\n  };\n};\n","import { viem } from \"@aperture_finance/uniswap-v3-automation-sdk\";\nimport { MixedRouteSDK, Protocol, Trade } from \"@uniswap/router-sdk\";\nimport {\n  ChainId,\n  Currency,\n  CurrencyAmount,\n  Percent,\n  TradeType,\n} from \"@uniswap/sdk-core\";\nimport {\n  DutchOrderInfo,\n  DutchOrderInfoJSON,\n  DutchOrderTrade as IDutchOrderTrade,\n} from \"@uniswap/uniswapx-sdk\";\nimport { Route as V2Route } from \"@uniswap/v2-sdk\";\nimport { Route as V3Route } from \"@uniswap/v3-sdk\";\n\nexport enum TradeState {\n  LOADING,\n  INVALID,\n  STALE,\n  NO_ROUTE_FOUND,\n  VALID,\n}\n\nexport enum QuoteMethod {\n  ROUTING_API = \"ROUTING_API\",\n  CLIENT_SIDE = \"CLIENT_SIDE\",\n  CLIENT_SIDE_FALLBACK = \"CLIENT_SIDE_FALLBACK\", // If client-side was used after the routing-api call failed.\n}\n\n// This is excluded from `RouterPreference` enum because it's only used\n// internally for token -> USDC trades to get a USD value.\nexport const INTERNAL_ROUTER_PREFERENCE_PRICE = \"price\" as const;\n\nexport enum RouterPreference {\n  X = \"uniswapx\",\n  API = \"api\",\n  CLIENT = \"client\",\n}\n\nexport interface GetQuoteArgs {\n  tokenInAddress: string;\n  tokenInChainId: ChainId;\n  tokenInDecimals: number;\n  tokenInSymbol?: string;\n  tokenOutAddress: string;\n  tokenOutChainId: ChainId;\n  tokenOutDecimals: number;\n  tokenOutSymbol?: string;\n  amount: string;\n  account?: string;\n  routerPreference: RouterPreference | typeof INTERNAL_ROUTER_PREFERENCE_PRICE;\n  tradeType: TradeType;\n  needsWrapIfUniswapX: boolean;\n  uniswapXEnabled: boolean;\n  uniswapXForceSyntheticQuotes: boolean;\n  uniswapXEthOutputEnabled: boolean;\n  forceUniswapXOn: boolean;\n  userDisabledUniswapX: boolean;\n  isRoutingAPIPrice?: boolean;\n}\n\nexport interface ClassicQuoteData {\n  quoteId?: string;\n  requestId?: string;\n  blockNumber: string;\n  amount: string;\n  amountDecimals: string;\n  gasPriceWei: string;\n  gasUseEstimate: string;\n  gasUseEstimateQuote: string;\n  gasUseEstimateQuoteDecimals: string;\n  gasUseEstimateUSD: string;\n  methodParameters?: { calldata: string; value: string };\n  quote: string;\n  quoteDecimals: string;\n  quoteGasAdjusted: string;\n  quoteGasAdjustedDecimals: string;\n  route: Array<(viem.V3PoolInRoute | viem.V2PoolInRoute)[]>;\n  routeString: string;\n}\n\ntype URADutchOrderQuoteResponse = {\n  routing: URAQuoteType.DUTCH_LIMIT;\n  quote: {\n    auctionPeriodSecs: number;\n    deadlineBufferSecs: number;\n    orderInfo: DutchOrderInfoJSON;\n    quoteId?: string;\n    requestId?: string;\n    slippageTolerance: string;\n  };\n  allQuotes: Array<URAQuoteResponse>;\n};\ntype URAClassicQuoteResponse = {\n  routing: URAQuoteType.CLASSIC;\n  quote: ClassicQuoteData;\n  allQuotes: Array<URAQuoteResponse>;\n};\nexport type URAQuoteResponse =\n  | URAClassicQuoteResponse\n  | URADutchOrderQuoteResponse;\n\nexport function isClassicQuoteResponse(\n  data: URAQuoteResponse\n): data is URAClassicQuoteResponse {\n  return data.routing === URAQuoteType.CLASSIC;\n}\n\nexport enum TradeFillType {\n  Classic = \"classic\", // Uniswap V1, V2, and V3 trades with on-chain routes\n  UniswapX = \"uniswap_x\", // off-chain trades, no routes\n}\n\nexport type ApproveInfo =\n  | { needsApprove: true; approveGasEstimateUSD: number }\n  | { needsApprove: false };\nexport type WrapInfo =\n  | { needsWrap: true; wrapGasEstimateUSD: number }\n  | { needsWrap: false };\n\nexport class ClassicTrade extends Trade<Currency, Currency, TradeType> {\n  public readonly fillType = TradeFillType.Classic;\n  approveInfo: ApproveInfo;\n  gasUseEstimateUSD?: number; // gas estimate for swaps\n  blockNumber: string | null | undefined;\n  isUniswapXBetter: boolean | undefined;\n  requestId: string | undefined;\n  quoteMethod: QuoteMethod;\n\n  constructor({\n    gasUseEstimateUSD,\n    blockNumber,\n    isUniswapXBetter,\n    requestId,\n    quoteMethod,\n    approveInfo,\n    ...routes\n  }: {\n    gasUseEstimateUSD?: number;\n    totalGasUseEstimateUSD?: number;\n    blockNumber?: string | null;\n    isUniswapXBetter?: boolean;\n    requestId?: string;\n    quoteMethod: QuoteMethod;\n    approveInfo: ApproveInfo;\n    v2Routes: {\n      routev2: V2Route<Currency, Currency>;\n      inputAmount: CurrencyAmount<Currency>;\n      outputAmount: CurrencyAmount<Currency>;\n    }[];\n    v3Routes: {\n      routev3: V3Route<Currency, Currency>;\n      inputAmount: CurrencyAmount<Currency>;\n      outputAmount: CurrencyAmount<Currency>;\n    }[];\n    tradeType: TradeType;\n    mixedRoutes?: {\n      mixedRoute: MixedRouteSDK<Currency, Currency>;\n      inputAmount: CurrencyAmount<Currency>;\n      outputAmount: CurrencyAmount<Currency>;\n    }[];\n  }) {\n    super(routes);\n    this.blockNumber = blockNumber;\n    this.gasUseEstimateUSD = gasUseEstimateUSD;\n    this.isUniswapXBetter = isUniswapXBetter;\n    this.requestId = requestId;\n    this.quoteMethod = quoteMethod;\n    this.approveInfo = approveInfo;\n  }\n\n  // gas estimate for maybe approve + swap\n  public get totalGasUseEstimateUSD(): number | undefined {\n    if (this.approveInfo.needsApprove && this.gasUseEstimateUSD) {\n      return this.approveInfo.approveGasEstimateUSD + this.gasUseEstimateUSD;\n    }\n\n    return this.gasUseEstimateUSD;\n  }\n}\n\nexport class DutchOrderTrade extends IDutchOrderTrade<\n  Currency,\n  Currency,\n  TradeType\n> {\n  public readonly fillType = TradeFillType.UniswapX;\n  quoteId?: string;\n  requestId?: string;\n  wrapInfo: WrapInfo;\n  approveInfo: ApproveInfo;\n  // The gas estimate of the reference classic trade, if there is one.\n  classicGasUseEstimateUSD?: number;\n  auctionPeriodSecs: number;\n  deadlineBufferSecs: number;\n  slippageTolerance: Percent;\n\n  constructor({\n    currencyIn,\n    currenciesOut,\n    orderInfo,\n    tradeType,\n    quoteId,\n    requestId,\n    wrapInfo,\n    approveInfo,\n    classicGasUseEstimateUSD,\n    auctionPeriodSecs,\n    deadlineBufferSecs,\n    slippageTolerance,\n  }: {\n    currencyIn: Currency;\n    currenciesOut: Currency[];\n    orderInfo: DutchOrderInfo;\n    tradeType: TradeType;\n    quoteId?: string;\n    requestId?: string;\n    approveInfo: ApproveInfo;\n    wrapInfo: WrapInfo;\n    classicGasUseEstimateUSD?: number;\n    auctionPeriodSecs: number;\n    deadlineBufferSecs: number;\n    slippageTolerance: Percent;\n  }) {\n    super({ currencyIn, currenciesOut, orderInfo, tradeType });\n    this.quoteId = quoteId;\n    this.requestId = requestId;\n    this.approveInfo = approveInfo;\n    this.wrapInfo = wrapInfo;\n    this.classicGasUseEstimateUSD = classicGasUseEstimateUSD;\n    this.auctionPeriodSecs = auctionPeriodSecs;\n    this.deadlineBufferSecs = deadlineBufferSecs;\n    this.slippageTolerance = slippageTolerance;\n  }\n\n  public get totalGasUseEstimateUSD(): number {\n    if (this.wrapInfo.needsWrap && this.approveInfo.needsApprove) {\n      return (\n        this.wrapInfo.wrapGasEstimateUSD +\n        this.approveInfo.approveGasEstimateUSD\n      );\n    }\n\n    if (this.wrapInfo.needsWrap) return this.wrapInfo.wrapGasEstimateUSD;\n    if (this.approveInfo.needsApprove)\n      return this.approveInfo.approveGasEstimateUSD;\n\n    return 0;\n  }\n}\n\nexport type InterfaceTrade = ClassicTrade | DutchOrderTrade;\n\nexport enum QuoteState {\n  SUCCESS = \"Success\",\n  NOT_FOUND = \"Not found\",\n}\n\nexport type QuoteResult =\n  | {\n      state: QuoteState.NOT_FOUND;\n      data?: undefined;\n    }\n  | {\n      state: QuoteState.SUCCESS;\n      data: URAQuoteResponse;\n    };\n\nexport type TradeResult =\n  | {\n      state: QuoteState.NOT_FOUND;\n      trade?: undefined;\n    }\n  | {\n      state: QuoteState.SUCCESS;\n      trade: InterfaceTrade;\n    };\n\nexport enum PoolType {\n  V2Pool = \"v2-pool\",\n  V3Pool = \"v3-pool\",\n}\n\n// swap router API special cases these strings to represent native currencies\n// all chains except for bnb chain and polygon\n// have \"ETH\" as native currency symbol\nexport enum SwapRouterNativeAssets {\n  MATIC = \"MATIC\",\n  BNB = \"BNB\",\n  AVAX = \"AVAX\",\n  ETH = \"ETH\",\n}\n\nexport enum URAQuoteType {\n  CLASSIC = \"CLASSIC\",\n  DUTCH_LIMIT = \"DUTCH_LIMIT\",\n}\n\ntype ClassicAPIConfig = {\n  protocols: Protocol[];\n};\n\ntype UniswapXConfig = {\n  swapper?: string;\n  exclusivityOverrideBps?: number;\n  auctionPeriodSecs?: number;\n};\n\nexport type RoutingConfig = (UniswapXConfig | ClassicAPIConfig)[];\n","import { getLogger, viem } from \"@aperture_finance/uniswap-v3-automation-sdk\";\nimport { MixedRouteSDK } from \"@uniswap/router-sdk\";\nimport { Currency, CurrencyAmount, Token } from \"@uniswap/sdk-core\";\nimport { Pair, Route as V2Route } from \"@uniswap/v2-sdk\";\nimport { FeeAmount, Pool, Route as V3Route } from \"@uniswap/v3-sdk\";\nimport { ClassicQuoteData, PoolType } from \"./types\";\n\nexport interface RouteResult {\n  routev3: V3Route<Currency, Currency> | null;\n  routev2: V2Route<Currency, Currency> | null;\n  mixedRoute: MixedRouteSDK<Currency, Currency> | null;\n  inputAmount: CurrencyAmount<Currency>;\n  outputAmount: CurrencyAmount<Currency>;\n}\n\n/**\n * Transforms a Routing API quote into an array of routes that can be used to\n * create a `Trade`.\n */\nexport function computeRoutes(\n  currencyIn: Currency,\n  currencyOut: Currency,\n  routes: ClassicQuoteData[\"route\"]\n): RouteResult[] | undefined {\n  if (routes.length === 0) return [];\n\n  const tokenIn = routes[0]?.[0]?.tokenIn;\n  const tokenOut = routes[0]?.[routes[0]?.length - 1]?.tokenOut;\n  if (!tokenIn || !tokenOut)\n    throw new Error(\"Expected both tokenIn and tokenOut to be present\");\n\n  try {\n    return routes.map((route) => {\n      if (route.length === 0) {\n        throw new Error(\"Expected route to have at least one pair or pool\");\n      }\n      const rawAmountIn = route[0].amountIn;\n      const rawAmountOut = route[route.length - 1].amountOut;\n\n      if (!rawAmountIn || !rawAmountOut) {\n        throw new Error(\"Expected both amountIn and amountOut to be present\");\n      }\n\n      const isOnlyV2 = isVersionedRoute<viem.V2PoolInRoute>(\n        PoolType.V2Pool,\n        route\n      );\n      const isOnlyV3 = isVersionedRoute<viem.V3PoolInRoute>(\n        PoolType.V3Pool,\n        route\n      );\n\n      return {\n        routev3: isOnlyV3\n          ? new V3Route(route.map(parsePool), currencyIn, currencyOut)\n          : null,\n        routev2: isOnlyV2\n          ? new V2Route(route.map(parsePair), currencyIn, currencyOut)\n          : null,\n        mixedRoute:\n          !isOnlyV3 && !isOnlyV2\n            ? new MixedRouteSDK(\n                route.map(parsePoolOrPair),\n                currencyIn,\n                currencyOut\n              )\n            : null,\n        inputAmount: CurrencyAmount.fromRawAmount(currencyIn, rawAmountIn),\n        outputAmount: CurrencyAmount.fromRawAmount(currencyOut, rawAmountOut),\n      };\n    });\n  } catch (e) {\n    getLogger().error(\"ComputeRoutes.Error\", {\n      errorMessage: (e as Error).message,\n      currencyIn,\n      currencyOut,\n      routes,\n    });\n    return;\n  }\n}\n\nconst parsePoolOrPair = (\n  pool: viem.V3PoolInRoute | viem.V2PoolInRoute\n): Pair | Pool => {\n  return (pool.type === PoolType.V3Pool ? parsePool(pool) : parsePair(pool)) as\n    | Pair\n    | Pool;\n};\n\nfunction isVersionedRoute<T extends viem.V2PoolInRoute | viem.V3PoolInRoute>(\n  type: T[\"type\"],\n  route: (viem.V3PoolInRoute | viem.V2PoolInRoute)[]\n): route is T[] {\n  return route.every((pool) => pool.type === type);\n}\n\nfunction parseToken({\n  address,\n  chainId,\n  decimals,\n  symbol,\n}: ClassicQuoteData[\"route\"][0][0][\"tokenIn\"]): Token {\n  return new Token(chainId, address, parseInt(decimals.toString()), symbol);\n}\n\nfunction parsePool({\n  fee,\n  sqrtRatioX96,\n  liquidity,\n  tickCurrent,\n  tokenIn,\n  tokenOut,\n}: viem.V3PoolInRoute): Pool {\n  return new Pool(\n    parseToken(tokenIn),\n    parseToken(tokenOut),\n    parseInt(fee) as FeeAmount,\n    sqrtRatioX96,\n    liquidity,\n    parseInt(tickCurrent)\n  );\n}\n\nconst parsePair = ({ reserve0, reserve1 }: viem.V2PoolInRoute): Pair =>\n  new Pair(\n    CurrencyAmount.fromRawAmount(parseToken(reserve0.token), reserve0.quotient),\n    CurrencyAmount.fromRawAmount(parseToken(reserve1.token), reserve1.quotient)\n  );\n","import { MixedQuoteResponse } from \"@/helper/fetchHelper\";\nimport { ClassicTrade, QuoteMethod } from \"@/utils/routing/types\";\nimport { RouteResult, computeRoutes } from \"@/utils/routing/utils\";\nimport { IToken } from \"@aperture/types\";\nimport { getAMMInfo, viem } from \"@aperture_finance/uniswap-v3-automation-sdk\";\nimport { Percent, TradeType } from \"@pancakeswap/sdk\";\nimport { SwapRouter as PCSRouter } from \"@pancakeswap/smart-router\";\nimport { V4Trade } from \"@pancakeswap/smart-router/dist/evm/v4-router\";\nimport { SwapOptions, SwapRouter } from \"@uniswap/router-sdk\";\nimport { Token } from \"@uniswap/sdk-core\";\nimport { Address } from \"viem\";\n\nexport const getUniswapCallData = ({\n  payToken,\n  receiveToken,\n  quoteResponse,\n  typeField,\n  networkId,\n  swapOptions,\n}: {\n  payToken: IToken;\n  receiveToken: IToken;\n  quoteResponse: MixedQuoteResponse;\n  typeField: \"pay\" | \"receive\";\n  networkId: number;\n  swapOptions: SwapOptions;\n}) => {\n  const currencyIn = payToken.native\n    ? viem.getNativeCurrency(networkId)\n    : new Token(\n        networkId,\n        payToken.address,\n        payToken.decimals,\n        payToken.ticker,\n        payToken.name\n      );\n  const currencyOut = receiveToken.native\n    ? viem.getNativeCurrency(networkId)\n    : new Token(\n        networkId,\n        receiveToken.address,\n        receiveToken.decimals,\n        receiveToken.ticker,\n        receiveToken.name\n      );\n  const routes = computeRoutes(currencyIn, currencyOut, quoteResponse.route);\n  const classicTrade = new ClassicTrade({\n    v2Routes:\n      routes\n        ?.filter(\n          (\n            r\n          ): r is RouteResult & {\n            routev2: NonNullable<RouteResult[\"routev2\"]>;\n          } => r.routev2 !== null\n        )\n        .map(({ routev2, inputAmount, outputAmount }) => ({\n          routev2,\n          inputAmount,\n          outputAmount,\n        })) ?? [],\n    v3Routes:\n      routes\n        ?.filter(\n          (\n            r\n          ): r is RouteResult & {\n            routev3: NonNullable<RouteResult[\"routev3\"]>;\n          } => r.routev3 !== null\n        )\n        .map(({ routev3, inputAmount, outputAmount }) => ({\n          routev3,\n          inputAmount,\n          outputAmount,\n        })) ?? [],\n    mixedRoutes:\n      routes\n        ?.filter(\n          (\n            r\n          ): r is RouteResult & {\n            mixedRoute: NonNullable<RouteResult[\"mixedRoute\"]>;\n          } => r.mixedRoute !== null\n        )\n        .map(({ mixedRoute, inputAmount, outputAmount }) => ({\n          mixedRoute,\n          inputAmount,\n          outputAmount,\n        })) ?? [],\n    tradeType: typeField === \"pay\" ? 0 : 1,\n    gasUseEstimateUSD: Number(quoteResponse.gasUseEstimateUSD),\n    approveInfo: { needsApprove: false },\n    blockNumber: quoteResponse.blockNumber,\n    quoteMethod: QuoteMethod.ROUTING_API,\n    requestId: quoteResponse.quoteId,\n  });\n  const { calldata, value } = SwapRouter.swapCallParameters(\n    classicTrade,\n    swapOptions\n  );\n  return {\n    calldata,\n    value,\n    to: getAMMInfo(networkId, \"UNISWAP_V3\").swapRouter,\n  };\n};\n\nexport const getPanCakeSwapCallData = ({\n  trade,\n  swapOptions,\n  networkId,\n}: {\n  trade: V4Trade<TradeType>;\n  swapOptions: SwapOptions;\n  networkId: number;\n}) => {\n  const { calldata, value } = PCSRouter.swapCallParameters(\n    {\n      tradeType: trade.tradeType,\n      inputAmount: trade.inputAmount,\n      outputAmount: trade.outputAmount,\n      routes: trade.routes,\n      gasEstimate: trade.gasUseEstimate,\n    },\n    {\n      slippageTolerance: new Percent(\n        swapOptions.slippageTolerance.numerator.toString(),\n        swapOptions.slippageTolerance.denominator.toString()\n      ),\n      recipient: swapOptions.recipient as Address,\n      deadlineOrPreviousBlockhash:\n        swapOptions.deadlineOrPreviousBlockhash?.toString(),\n      fee: swapOptions.fee\n        ? {\n            fee: new Percent(\n              swapOptions.fee.fee.numerator.toString(),\n              swapOptions.fee.fee.denominator.toString()\n            ),\n            recipient: swapOptions.fee.recipient as Address,\n          }\n        : undefined,\n      // Note that `inputTokenPermit` is not specified since we currently don't support input ERC20 token permit; we always check on-chain approval for the input token.\n    }\n  );\n  return {\n    calldata,\n    value,\n    to: getAMMInfo(networkId, \"PANCAKESWAP_V3\").swapRouter,\n  };\n};\n","import { useNetwork } from \"@/components/NetworkContext/NetworkContext\";\nimport { useSnackbarV2 } from \"@/components/SnackbarContext/SnackbarContextV2\";\nimport { MixedQuoteResponse } from \"@/helper/fetchHelper\";\nimport { estimateGas } from \"@/helper/transactionHelper\";\nimport { useEventCallback } from \"@/hooks/useEventCallback\";\nimport { getTokenBalance } from \"@/hooks/useFetchUserTokensBalance\";\nimport { useSendTransactionWithGas } from \"@/hooks/wagmi/useSendTransactionWithGas\";\nimport { FEE_RECIPIENT, calculateGasMargin } from \"@/utils/helper\";\nimport { numberToPercent } from \"@/utils/routing/utils/slippage\";\nimport { getApertureFeeForSwap } from \"@/views/Swap\";\nimport { IToken } from \"@aperture/types\";\nimport {\n  Button,\n  E_AMM,\n  ITransactionSettingsForm,\n  Spinner,\n} from \"@aperture/uikit\";\nimport { getLogger } from \"@aperture_finance/uniswap-v3-automation-sdk\";\nimport bigDecimal from \"js-big-decimal\";\nimport { Dispatch, SetStateAction, useEffect, useMemo, useState } from \"react\";\nimport {\n  EstimateGasExecutionError,\n  Hex,\n  TransactionExecutionError,\n} from \"viem\";\nimport { useAccount } from \"wagmi\";\nimport { getPanCakeSwapCallData, getUniswapCallData } from \"./utils\";\n\nexport interface SwapBtnProps {\n  typeField: \"pay\" | \"receive\" | null;\n  payToken: IToken | null;\n  receiveToken: IToken | null;\n  payAmount: string | null;\n  receiveAmount: string | null;\n  isWrap?: boolean;\n  isUnwrap?: boolean;\n  quoteResponse?: MixedQuoteResponse;\n  isRouteSyncing: boolean;\n  wrapTxn?: any;\n  isTxnLoading: boolean;\n  isEstimating: boolean;\n  transactionSettings: ITransactionSettingsForm;\n  setTxnLoading: (isLoading: boolean) => void;\n  swapTxnApproved: (hash: string) => void;\n  setGasEstimated: Dispatch<SetStateAction<bigint>>;\n  setIsEstimating: Dispatch<SetStateAction<boolean>>;\n}\n\nexport const SwapBtnComponent: React.FC<SwapBtnProps> = ({\n  typeField,\n  payToken,\n  receiveToken,\n  payAmount,\n  receiveAmount,\n  isWrap,\n  isUnwrap,\n  quoteResponse,\n  isRouteSyncing,\n  wrapTxn,\n  isTxnLoading,\n  isEstimating: isGasLoading,\n  transactionSettings,\n  setTxnLoading,\n  swapTxnApproved,\n  setGasEstimated,\n  setIsEstimating: setIsGasLoading,\n}) => {\n  const { isConnected, address: walletAddress } = useAccount();\n  const { networkId, publicClient, amm, network } = useNetwork();\n  const { addSnackbar } = useSnackbarV2();\n  const [tx, setTx] = useState<any>(undefined);\n  const [gasError, setGasError] = useState(\"\");\n  const isWrapTokenPair = isWrap || isUnwrap;\n\n  const generateTx = useEventCallback(() => {\n    setGasError(\"\");\n    if (!payToken || !receiveToken) {\n      setTx(undefined);\n    } else {\n      try {\n        const swapFee = getApertureFeeForSwap(\n          payToken?.ticker,\n          receiveToken?.ticker\n        );\n        const swapOptions = {\n          // Pancake will fail to swap to native currency without the recipient\n          recipient: walletAddress,\n          slippageTolerance: numberToPercent(transactionSettings.slippage),\n          deadlineOrPreviousBlockhash: bigDecimal.add(\n            bigDecimal.divide(Date.now(), 1000, 0),\n            bigDecimal.multiply(\n              !!transactionSettings.deadline\n                ? transactionSettings.deadline\n                : 30,\n              60\n            )\n          ),\n          fee:\n            swapFee > 0\n              ? {\n                  fee: numberToPercent(swapFee),\n                  recipient: FEE_RECIPIENT[amm.name][network],\n                }\n              : undefined,\n        };\n\n        const { calldata, value, to } = quoteResponse.trade\n          ? getPanCakeSwapCallData({\n              trade: quoteResponse.trade,\n              swapOptions,\n              networkId,\n            })\n          : getUniswapCallData({\n              payToken,\n              receiveToken,\n              quoteResponse,\n              typeField: typeField ?? \"pay\",\n              networkId,\n              swapOptions,\n            });\n\n        if (!calldata || !value) {\n          setGasEstimated(undefined);\n          setIsGasLoading(false);\n          return;\n        }\n\n        const baseTx = {\n          data: calldata as Hex,\n          value: BigInt(value),\n          to,\n        };\n\n        const logData = {\n          payToken: payToken?.ticker,\n          receiveToken: receiveToken?.ticker,\n          payAmount: payAmount,\n        };\n\n        setIsGasLoading(true);\n        estimateGas(\n          {\n            from: walletAddress,\n            ...baseTx,\n          },\n          networkId,\n          publicClient\n        )\n          .then(({ l2GasAmount, totalGasCost }) => {\n            setGasEstimated(totalGasCost);\n            setTx({\n              ...baseTx,\n              gas: calculateGasMargin(l2GasAmount),\n            });\n            setIsGasLoading(false);\n\n            getLogger().debug(\"Swap.EstimateGas.Success\", logData);\n          })\n          .catch((gasError) => {\n            const error = gasError as EstimateGasExecutionError;\n            setGasEstimated(undefined);\n            setIsGasLoading(false);\n            setGasError(error.details);\n\n            (async function () {\n              getLogger().error(\"Swap.EstimateGas.Error\", {\n                error: JSON.stringify(error.message),\n                detail: error.details,\n                from: walletAddress,\n                ...logData,\n                receiveAmount: receiveAmount,\n                swapOptions: swapOptions,\n                blockNumber: await publicClient.getBlockNumber(),\n                payTokenBalance: await getTokenBalance(\n                  publicClient,\n                  walletAddress,\n                  {\n                    address: payToken.address,\n                    decimals: payToken.decimals,\n                  }\n                ),\n              });\n            })().catch(() => {});\n          });\n      } catch (error) {\n        getLogger().error(\"Swap.GenerateTx: \", {\n          error: JSON.stringify((error as Error).message),\n        });\n        setTx(undefined);\n      }\n    }\n  });\n\n  const beforeGenerateTxError = useMemo(() => {\n    if (amm.name === E_AMM.Aerodrome || amm.name === E_AMM.Velodrome) {\n      return \"Not supported. Please use Uniswap\";\n    }\n    if (!isConnected) {\n      return \"Connect Wallet\";\n    }\n    if (!payToken || !receiveToken) {\n      return \"Select a token\";\n    }\n    if (\n      bigDecimal.compareTo(payAmount ?? 0, 0) <= 0 &&\n      bigDecimal.compareTo(receiveAmount ?? 0, 0) <= 0\n    ) {\n      return \"Enter an amount\";\n    }\n    if (bigDecimal.compareTo(payAmount ?? 0, payToken.amount) > 0) {\n      return `Insufficient ${payToken.ticker} balance`;\n    }\n\n    if (!isRouteSyncing && !isWrapTokenPair && !quoteResponse) {\n      return \"Failed to get quote\";\n    }\n\n    return \"\";\n  }, [\n    amm.name,\n    isConnected,\n    isRouteSyncing,\n    isWrapTokenPair,\n    payAmount,\n    payToken,\n    quoteResponse,\n    receiveAmount,\n    receiveToken,\n  ]);\n\n  useEffect(() => {\n    if (quoteResponse && !isRouteSyncing) {\n      generateTx();\n    }\n  }, [generateTx, isRouteSyncing, quoteResponse]);\n\n  const { ready, sendTransactionAsync, isPending } =\n    useSendTransactionWithGas(tx);\n\n  const handleSwap = () => {\n    sendTransactionAsync()\n      .then((hash) => {\n        swapTxnApproved(hash);\n      })\n      .catch((error: any) => {\n        const isUserRejected = (\n          error as TransactionExecutionError\n        ).message.includes(\"User rejected the request\");\n        addSnackbar({\n          info: `Your swap token request has failed. \n          ${!isUserRejected ? \"Try adjusting slippage to a higher value\" : \"\"}`,\n          status: \"failed\",\n        });\n      });\n  };\n\n  useEffect(() => {\n    setTxnLoading(isPending);\n  }, [isPending]);\n\n  const error = beforeGenerateTxError || gasError;\n\n  useEffect(() => {\n    // reset gas estimation if tx is reset\n    if (!tx) {\n      setGasEstimated(undefined);\n    }\n  }, [setGasEstimated, tx]);\n\n  if (error) {\n    if (tx) {\n      setTx(undefined);\n    }\n  } else if (isWrapTokenPair && tx !== wrapTxn) {\n    setTx(wrapTxn);\n  }\n\n  return (\n    <Button\n      variant=\"contained\"\n      color=\"secondary\"\n      size=\"lg\"\n      width=\"100%\"\n      onClick={handleSwap}\n      disabled={\n        !ready || !!error || isRouteSyncing || isTxnLoading || isGasLoading\n      }\n    >\n      {error ? (\n        error\n      ) : isRouteSyncing || isTxnLoading || isGasLoading ? (\n        <>\n          <Spinner /> Loading\n        </>\n      ) : isWrap ? (\n        \"Wrap\"\n      ) : isUnwrap ? (\n        \"Unwrap\"\n      ) : (\n        \"Swap\"\n      )}\n    </Button>\n  );\n};\n","import { useNetwork } from \"@/components/NetworkContext/NetworkContext\";\nimport { getChainInfo } from \"@aperture_finance/uniswap-v3-automation-sdk\";\nimport { memo, useState } from \"react\";\nimport { useAccount } from \"wagmi\";\nimport { ApproveTokenBtn } from \"../ApprovalBtn\";\nimport { SwapBtnComponent, SwapBtnProps } from \"./SwapBtnComponent\";\n\nconst ApproveAndSwapBtn: React.FC<SwapBtnProps> = (props) => {\n  const { payToken, payAmount, receiveToken } = props;\n  const { isConnected } = useAccount();\n  const [approved, setApproved] = useState<boolean>(false);\n  const { ammEnum, networkId } = useNetwork();\n  const contractAddress = getChainInfo(networkId).amms[ammEnum]?.swapRouter;\n  const isNative = payToken?.native;\n  const isWrap =\n    payToken?.native && receiveToken?.address === payToken?.address;\n  const isUnwrap =\n    receiveToken?.native && receiveToken?.address === payToken?.address;\n\n  if (\n    ammEnum !== \"SLIPSTREAM\" && // not support swap on slipstream\n    isConnected &&\n    payToken &&\n    payAmount &&\n    !approved &&\n    !isWrap &&\n    !isUnwrap\n  ) {\n    return (\n      <ApproveTokenBtn\n        variant=\"contained\"\n        color=\"secondary\"\n        token={payToken}\n        contractAddress={contractAddress}\n        amount={payAmount ?? \"0\"}\n        approveOnChange={(approve: boolean) => {\n          setApproved(approve);\n        }}\n        useNative={isNative}\n      />\n    );\n  }\n  return <SwapBtnComponent {...props} isWrap={isWrap} isUnwrap={isUnwrap} />;\n};\n\nexport const SwapBtn = memo(ApproveAndSwapBtn);\n","import { SwapBtn } from \"./SwapBtn\";\n\nexport { SwapBtn };\nexport default SwapBtn;\n","import { getAutomanAPI } from \"@/utils/helper\";\nimport { AutomanClient } from \"@aperture_finance/uniswap-v3-automation-sdk\";\n\nlet client: AutomanClient;\n\nexport const getAutomanClient = () => {\n  if (!client) {\n    client = new AutomanClient(getAutomanAPI());\n  }\n  return client;\n};\n","import { getApertureFeeForSwap } from \"@/views/Swap\";\nimport { IToken } from \"@aperture/types\";\nimport { AmmEnum } from \"@aperture/uikit\";\nimport {\n  ApertureSupportedChainId,\n  viem,\n} from \"@aperture_finance/uniswap-v3-automation-sdk\";\nimport { Currency, CurrencyAmount, TradeType } from \"@pancakeswap/sdk\";\n\nimport { getPublicClient } from \"@/helper/getPublicClient\";\nimport { V4Router } from \"@pancakeswap/smart-router\";\nimport { Token } from \"@uniswap/sdk-core\";\nimport bigDecimal from \"js-big-decimal\";\nimport { parseUnits } from \"viem\";\n\nexport async function getTrade(\n  chainId: ApertureSupportedChainId,\n  currencyIn: Currency,\n  currencyOut: Currency,\n  type: \"exactIn\" | \"exactOut\",\n  rawAmount: bigint\n) {\n  const client = getPublicClient(chainId);\n  const v3Pools = await V4Router.getV3CandidatePools({\n    // @ts-ignore: passing viem v2 client as a viem v1 client.\n    clientProvider: () => client,\n    currencyA: currencyIn,\n    currencyB: currencyOut,\n  });\n  const pools = [...v3Pools];\n\n  const trade = await V4Router.getBestTrade(\n    CurrencyAmount.fromRawAmount(\n      type === \"exactIn\" ? currencyIn : currencyOut,\n      rawAmount.toString()\n    ),\n    type === \"exactIn\" ? currencyOut : currencyIn,\n    type === \"exactIn\" ? TradeType.EXACT_INPUT : TradeType.EXACT_OUTPUT,\n    {\n      gasPriceWei: () => client.getGasPrice(),\n      candidatePools: pools,\n    }\n  );\n\n  return trade;\n}\n\ntype QuoteProps = {\n  chainId: ApertureSupportedChainId;\n  payToken: IToken;\n  receiveToken: IToken;\n  amount: string;\n  type: \"exactIn\" | \"exactOut\";\n  amm?: AmmEnum;\n};\n\nexport type MixedQuoteResponse = Partial<viem.RoutingApiQuoteResponse> & {\n  trade?: V4Router.V4Trade<TradeType>;\n};\n\nexport const getQuoteV2 = async (\n  props: QuoteProps\n): Promise<MixedQuoteResponse> => {\n  const { chainId, payToken, receiveToken, amount, type, amm } = props;\n  const tokenDecimals =\n    type === \"exactIn\" ? payToken.decimals : receiveToken.decimals;\n  const rateAfterFee =\n    1 - getApertureFeeForSwap(payToken.ticker, receiveToken.ticker);\n  const rawAmount = parseUnits(\n    type === \"exactOut\"\n      ? bigDecimal.divide(amount, rateAfterFee, tokenDecimals)\n      : bigDecimal.round(amount, tokenDecimals, bigDecimal.RoundingModes.DOWN),\n    tokenDecimals\n  );\n\n  if (amm === \"PANCAKESWAP_V3\") {\n    const currencyIn = payToken.native\n      ? viem.getNativeCurrency(chainId)\n      : new Token(\n          chainId,\n          payToken.address,\n          payToken.decimals,\n          payToken.ticker,\n          payToken.name\n        );\n    const currencyOut = receiveToken.native\n      ? viem.getNativeCurrency(chainId)\n      : new Token(\n          chainId,\n          receiveToken.address,\n          receiveToken.decimals,\n          receiveToken.ticker,\n          receiveToken.name\n        );\n    const trade = await getTrade(\n      chainId,\n      currencyIn as Currency,\n      currencyOut as Currency,\n      type,\n      rawAmount\n    );\n    return {\n      trade,\n      quoteDecimals:\n        type === \"exactIn\"\n          ? trade.outputAmount.toExact()\n          : trade.inputAmount.toExact(),\n      gasUseEstimateUSD: bigDecimal.multiply(\n        (type === \"exactIn\" ? receiveToken : payToken).price,\n        trade.gasUseEstimateQuote.toFixed()\n      ),\n      amount:\n        type === \"exactIn\"\n          ? trade.inputAmount.toFixed()\n          : trade.outputAmount.toFixed(),\n      quote:\n        type === \"exactIn\"\n          ? trade.outputAmount.toFixed()\n          : trade.inputAmount.toFixed(),\n    };\n  } else {\n    return await viem.fetchQuoteFromRoutingApi(\n      chainId,\n      payToken.address,\n      receiveToken.address,\n      rawAmount,\n      type\n    );\n  }\n};\n","export * from \"./getAllChainInfo\";\nexport * from \"./getAutomanClient\";\nexport * from \"./getQuote\";\n","import { SwapBtn } from \"@/components/Button/SwapBtn\";\nimport { TokenSelectModal } from \"@/components/Modal/TokenSelectModal\";\nimport { useNetwork } from \"@/components/NetworkContext/NetworkContext\";\nimport { useSnackbarV2 } from \"@/components/SnackbarContext/SnackbarContextV2\";\nimport { getExplorerURL } from \"@/config/chain\";\nimport { getQuoteV2 } from \"@/helper/fetchHelper\";\nimport { useMutateWarningTokens } from \"@/hooks/globalState/useWarningTokens\";\nimport { fetchUnknownToken, useFetchTokenMap } from \"@/hooks/useFetchTokenMap\";\nimport { useFetchUserTokensBalance } from \"@/hooks/useFetchUserTokensBalance\";\nimport { useWaitForTransaction } from \"@/hooks/useWaitForTransaction\";\nimport {\n  DEFAULT_APERTURE_SWAP_FEE,\n  DEFAULT_SLIPPAGE,\n  DEFAULT_SWAP_WARNING_THRESHOLD,\n  isTokensEquivalent,\n  isWrappedTokenPair,\n} from \"@/utils/helper\";\nimport { getNetworkName } from \"@/utils/networkHelper\";\nimport { IToken } from \"@aperture/types\";\nimport {\n  ConnectionType,\n  ExchangeRate,\n  ITransactionSettingsForm,\n  SwapInput,\n  TokenWarningContent,\n  getChainInfo,\n  useResize,\n} from \"@aperture/uikit\";\nimport { E_ModalKey, Modal, useModal } from \"@aperture/uikitv2\";\nimport { getLogger, viem } from \"@aperture_finance/uniswap-v3-automation-sdk\";\nimport { FeeAmount } from \"@aperture_finance/uniswap-v3-sdk\";\nimport { PoolType } from \"@pancakeswap/smart-router\";\nimport { Token } from \"@uniswap/sdk-core\";\nimport { useRequest } from \"ahooks\";\nimport bigDecimal from \"js-big-decimal\";\nimport { useEffect, useMemo, useState, useTransition } from \"react\";\nimport { Address, TransactionRequest, formatUnits } from \"viem\";\nimport { useAccount } from \"wagmi\";\nimport {\n  ButtonWrapper,\n  DivideDiv,\n  DivideY,\n  ExchangeWrapper,\n  SwapButton,\n  SwapButtonIcon,\n  SwapContainer,\n  SwapInputWrapper,\n} from \"./style\";\n\nconst STABLE_COINS_FOR_FEE = [\n  \"USDC\",\n  \"USDC.e\",\n  \"USDbC\",\n  \"USDT\",\n  \"DAI\",\n  \"BUSD\",\n  \"GUSD\",\n  \"LUSD\",\n  \"MUSD\",\n  \"PYUSD\",\n  \"sUSD\",\n  \"wUSDM\",\n];\n\nfunction getPercentage(amountIn: string, amount: string) {\n  return bigDecimal.compareTo(amount, 0) > 0\n    ? bigDecimal.divide(amountIn, amount, 2)\n    : \"0\";\n}\n\n// Refer to aperture fee rule https://www.notion.so/aperture-finance/Aperture-Revenue-Model-d14eeeff88034a3a95bd900b9670f0d8\nexport function getApertureFeeForSwap(tokenIn: string, tokenOut: string) {\n  const isStableCoin =\n    STABLE_COINS_FOR_FEE.includes(tokenIn) &&\n    STABLE_COINS_FOR_FEE.includes(tokenOut);\n\n  return !isStableCoin ? DEFAULT_APERTURE_SWAP_FEE : 0;\n}\n\ninterface ITokenWarning {\n  token: IToken;\n  isPayToken: boolean;\n}\n\nconst SwapToken: React.FC<{\n  settingsForm: ITransactionSettingsForm;\n  wrapperGap?: number;\n}> = ({ settingsForm, wrapperGap = 10 }) => {\n  const { ammEnum, networkId, publicClient, isChainSupported } = useNetwork();\n  const { address: walletAddress, isConnected, connector } = useAccount();\n  const { addSnackbar } = useSnackbarV2();\n  const { state, setModalState } = useModal();\n  const { isOpen } = state[E_ModalKey.TOKEN_SELECT_MODAL];\n  const [isPayToken, setIsPayToken] = useState<boolean>();\n  const { isOpen: isTokenWarningOpen } = state[E_ModalKey.TOKEN_WARNING_MODAL];\n  const [tokenWarning, setTokenWarning] = useState<ITokenWarning>();\n\n  const { data: tokenMap } = useFetchTokenMap();\n  const { mutate: tokenBalanceMutate } = useFetchUserTokensBalance();\n  const { mutateWarningTokens } = useMutateWarningTokens();\n  const [, startTransition] = useTransition();\n  const [typeField, setTypeField] = useState<\"pay\" | \"receive\" | null>(null);\n  const [isBalanceMutating, setIsBalanceMutating] = useState(false);\n  const [isRouteSyncing, setIsRouteSyncing] = useState(false);\n  const [payToken, setPayToken] = useState<IToken | null>(null);\n  const [receiveToken, setReceiveToken] = useState<IToken | null>(null);\n  const [payAmount, setPayAmount] = useState<string | null>(null);\n  const [receiveAmount, setReceiveAmount] = useState<string | null>(null);\n\n  const [wrapTxn, setWrapTxn] = useState<TransactionRequest | undefined>(\n    undefined\n  );\n  const [swapTxnHash, setSwapTxnHash] = useState<string>(undefined);\n  const [isSwapTxnLoading, setIsSwapTxnLoading] = useState(false);\n  const {\n    data: waitSwapTxnData,\n    isLoading: isWaitSwapTxnLoading,\n    isSuccess: isWaitSwapTxnSuccess,\n  } = useWaitForTransaction({ hash: swapTxnHash as Address });\n  const [gasEstimated, setGasEstimated] = useState<bigint>(undefined);\n  const nativeCurrency = viem.getNativeCurrency(networkId);\n  const [isEstimating, setIsEstimating] = useState(false);\n\n  const { updateHeight } = useResize();\n  const isWrap =\n    payToken?.native && receiveToken?.address === payToken?.address;\n  const isUnwrap =\n    receiveToken?.native && receiveToken?.address === payToken?.address;\n\n  const resetSwapInput = () => {\n    startTransition(() => {\n      setPayToken(null);\n      setReceiveToken(null);\n      setPayAmount(null);\n      setReceiveAmount(null);\n      setTypeField(null);\n      setSwapTxnHash(undefined);\n    });\n  };\n\n  useEffect(() => {\n    resetSwapInput();\n  }, [networkId, isChainSupported]);\n\n  useEffect(() => {\n    if (payToken && tokenMap?.[`${payToken.address}-${payToken.native}`])\n      setPayToken(tokenMap[`${payToken.address}-${payToken.native}`]);\n    if (\n      receiveToken &&\n      tokenMap?.[`${receiveToken.address}-${receiveToken.native}`]\n    )\n      setReceiveToken(\n        tokenMap[`${receiveToken.address}-${receiveToken.native}`]\n      );\n  }, [tokenMap]);\n\n  const commonTokens = useMemo(\n    () =>\n      Object.values(tokenMap ?? {}).sort((a, b) =>\n        bigDecimal.compareTo(b.amount, a.amount)\n      ),\n    [tokenMap]\n  );\n  // TODO: replace with real popular tokens data here\n  const mockPopularTokens = useMemo(() => {\n    return !!tokenMap\n      ? Object.values(tokenMap).filter((token) => {\n          const ticker = token.ticker?.toLowerCase();\n          return ticker === \"eth\" || ticker === \"usdc\";\n        })\n      : [];\n  }, [tokenMap]);\n\n  const {\n    run: runQuote,\n    loading: isQuoteLoading,\n    data: quoteResponse,\n    cancel: cancelQuote,\n  } = useRequest(\n    async (\n      payToken: IToken,\n      receiveToken: IToken,\n      amount: string,\n      type: \"exactIn\" | \"exactOut\"\n    ) => {\n      const isWrappedTokens =\n        payToken && receiveToken && isWrappedTokenPair(payToken, receiveToken);\n      const isValidTokenPair =\n        payToken && receiveToken && !isTokensEquivalent(payToken, receiveToken);\n      if (isWrappedTokens && bigDecimal.compareTo(amount, 0) > 0) {\n        if (!isRouteSyncing) setIsRouteSyncing(true);\n        if (type === \"exactIn\") setReceiveAmount(amount);\n        else setPayAmount(amount);\n\n        if (payToken.native)\n          setWrapTxn(\n            viem.getWrapETHTx(\n              networkId,\n              BigInt(\n                bigDecimal.multiply(amount, Math.pow(10, payToken.decimals))\n              )\n            )\n          );\n        else\n          setWrapTxn(\n            viem.getUnwrapETHTx(\n              networkId,\n              BigInt(\n                bigDecimal.multiply(amount, Math.pow(10, receiveToken.decimals))\n              )\n            )\n          );\n        setIsRouteSyncing(false);\n        return undefined;\n      } else if (isValidTokenPair && bigDecimal.compareTo(amount, 0) > 0) {\n        if (!isRouteSyncing) setIsRouteSyncing(true);\n        try {\n          const quote = await getQuoteV2({\n            chainId: networkId,\n            payToken,\n            receiveToken,\n            amount,\n            type,\n            amm: ammEnum,\n          });\n\n          if (type === \"exactIn\") {\n            const rateAfterFee =\n              1 - getApertureFeeForSwap(payToken.ticker, receiveToken.ticker);\n            setReceiveAmount(\n              bigDecimal.round(\n                bigDecimal.multiply(quote?.quoteDecimals, rateAfterFee),\n                receiveToken.decimals\n              )\n            );\n          } else setPayAmount(quote?.quoteDecimals);\n          return quote;\n        } catch (error) {\n          console.log(\"Failed to get quote\", error);\n\n          const isError =\n            (error as Error).message !== \"Request failed with status code 404\";\n          const context = {\n            chainId: networkId,\n            payToken: payToken.ticker,\n            payTokenAddr: payToken.address,\n            receiveToken: receiveToken.ticker,\n            receiveTokenAddr: receiveToken.address,\n            pairKey: [payToken.address, receiveToken.address].sort().join(\"-\"),\n            amount,\n            type,\n            amm: ammEnum,\n            error: (error as Error)?.message,\n          };\n\n          isError\n            ? getLogger().error(\"[Swap] Failed to getQuoteV2\", context)\n            : getLogger().warn(\"[Swap] Failed to getQuoteV2\", context);\n\n          updateHeight(\"100vh\");\n          if (type === \"exactIn\") setReceiveAmount(\"\");\n          else setPayAmount(\"\");\n          return undefined;\n        } finally {\n          setIsRouteSyncing(false);\n        }\n      } else {\n        if (type === \"exactIn\") setReceiveAmount(\"\");\n        else setPayAmount(\"\");\n        setIsRouteSyncing(false);\n        return undefined;\n      }\n    },\n    {\n      manual: true,\n      debounceWait: 500,\n      pollingInterval: 30_000,\n    }\n  );\n\n  useEffect(() => {\n    if (typeField === \"receive\") {\n      runQuote(payToken, receiveToken, receiveAmount, \"exactOut\");\n    }\n  }, [runQuote, receiveAmount, typeField, payToken, receiveToken, ammEnum]);\n\n  useEffect(() => {\n    if (typeField === \"pay\") {\n      runQuote(payToken, receiveToken, payAmount, \"exactIn\");\n    }\n  }, [runQuote, payAmount, typeField, payToken, receiveToken, ammEnum]);\n\n  useEffect(() => {\n    if (!quoteResponse) {\n      cancelQuote();\n    }\n  }, [quoteResponse]);\n\n  const priceImpact = useMemo(() => {\n    if (\n      payToken &&\n      receiveToken &&\n      payAmount &&\n      receiveAmount &&\n      !isRouteSyncing\n    ) {\n      const pay =\n        !!payToken.price && payToken.price !== \"-\"\n          ? bigDecimal.multiply(payToken.price, payAmount)\n          : \"\";\n      const receive =\n        !!receiveToken.price && receiveToken.price !== \"-\"\n          ? bigDecimal.multiply(receiveToken.price, receiveAmount)\n          : \"\";\n      return pay && receive && bigDecimal.compareTo(pay, 0) > 0\n        ? bigDecimal.multiply(\n            bigDecimal.divide(bigDecimal.subtract(receive, pay), pay, 6),\n            100\n          )\n        : undefined;\n    }\n  }, [payToken, receiveToken, payAmount, receiveAmount, isRouteSyncing]);\n\n  const networkFee = useMemo(() => {\n    const gas = gasEstimated\n      ? formatUnits(gasEstimated, nativeCurrency.decimals)\n      : undefined;\n    return {\n      gasUSD:\n        isConnected && gasEstimated\n          ? bigDecimal.multiply(\n              gas,\n              tokenMap?.[`${nativeCurrency.wrapped.address}-true`].price\n            )\n          : quoteResponse?.gasUseEstimateUSD,\n      gasAmount: gas,\n      symbol: nativeCurrency.symbol,\n    };\n  }, [isConnected, gasEstimated, tokenMap, quoteResponse, nativeCurrency]);\n\n  const handleSelectToken = async (token: IToken, isPayToken: boolean) => {\n    setIsRouteSyncing(true);\n    if (\n      (isPayToken && isTokensEquivalent(token, receiveToken)) ||\n      (!isPayToken && isTokensEquivalent(token, payToken))\n    ) {\n      /* Do switch:\n      If select pay token and the selected token is same as receive token;\n      If select receive token and the selected token is same as pay token;*/\n      handleSwitch();\n    } else isPayToken ? setPayToken(token) : setReceiveToken(token);\n    toggleSelectTokenModal(false);\n  };\n\n  const handleSwitch = () => {\n    const storedPayInfo = { token: payToken, amount: payAmount };\n    const storedReceiveInfo = { token: receiveToken, amount: receiveAmount };\n    startTransition(() => {\n      if (!isRouteSyncing) setIsRouteSyncing(true);\n      setPayToken(storedReceiveInfo.token);\n      setReceiveToken(storedPayInfo.token);\n      if (typeField === \"pay\") {\n        setPayAmount(\"\");\n        setTypeField(\"receive\");\n        setReceiveAmount(storedPayInfo.amount);\n      } else if (typeField === \"receive\") {\n        setReceiveAmount(\"\");\n        setTypeField(\"pay\");\n        setPayAmount(storedReceiveInfo.amount);\n      } else {\n        setPayAmount(\"\");\n        setReceiveAmount(\"\");\n      }\n    });\n  };\n\n  const handleUnknownAddress = async (tokenAddress: string) => {\n    return await fetchUnknownToken(\n      tokenAddress,\n      networkId,\n      publicClient,\n      isConnected,\n      walletAddress\n    );\n  };\n\n  const toggleSelectTokenModal = (open: boolean) => {\n    setModalState(E_ModalKey.TOKEN_SELECT_MODAL, open);\n  };\n  const toggleTokenWarningModal = (open: boolean) => {\n    setModalState(E_ModalKey.TOKEN_WARNING_MODAL, open);\n  };\n\n  const swapFee =\n    payToken && receiveToken && !(isWrap || isUnwrap)\n      ? getApertureFeeForSwap(payToken.ticker, receiveToken.ticker)\n      : 0;\n\n  useEffect(() => {\n    if (swapTxnHash) {\n      addSnackbar({\n        info: \"Your swap token request has been sent.\",\n        status: \"completed\",\n        transaction: {\n          hash: swapTxnHash as Address,\n          successMsg: `Your ${payToken.ticker}-${receiveToken.ticker} swap transaction succeeded.`,\n          failureMsg: `Your ${payToken.ticker}-${receiveToken.ticker} swap transaction has failed.`,\n        },\n      });\n      const feeAmount =\n        !!payToken.price && payToken.price !== \"-\"\n          ? bigDecimal.multiply(payToken.price, payAmount)\n          : \"-\";\n      const swapFeeUSD =\n        feeAmount !== \"-\" ? bigDecimal.multiply(swapFee, feeAmount) : \"-\";\n      const context = {\n        txHash: swapTxnHash,\n        chainId: networkId,\n        amm: ammEnum,\n        payToken: payToken.ticker,\n        receiveToken: receiveToken.ticker,\n        payAmount,\n        receiveAmount,\n        swapFee,\n        swapFeeUSD: Number(swapFeeUSD),\n      };\n      getLogger().info(\"Swap Token Request Sent Success\", context);\n    }\n  }, [swapTxnHash]);\n\n  useEffect(() => {\n    const mutateTokenBalance = async () => {\n      setIsBalanceMutating(true);\n      cancelQuote();\n      resetSwapInput();\n      await tokenBalanceMutate();\n      setIsBalanceMutating(false);\n    };\n\n    if (isWaitSwapTxnSuccess && waitSwapTxnData) {\n      mutateTokenBalance();\n    }\n  }, [isWaitSwapTxnSuccess]);\n\n  const convertedRoute = useMemo(() => {\n    if (ammEnum === \"UNISWAP_V3\") {\n      const route = (quoteResponse as viem.RoutingApiQuoteResponse)?.route;\n      return route\n        ? Object.values(route).map((poolInRoute) => ({\n            percentage: getPercentage(\n              poolInRoute[0].amountIn,\n              typeField === \"pay\" ? quoteResponse.amount : quoteResponse.quote\n            ),\n            swaps: Object.values(poolInRoute).map((swap) => {\n              return {\n                sellToken: tokenMap?.[`${swap.tokenIn.address}-${false}`],\n                buyToken: tokenMap?.[`${swap.tokenOut.address}-${false}`],\n                feeTier:\n                  swap.type === \"v3-pool\"\n                    ? (Number(swap.fee) as FeeAmount)\n                    : FeeAmount.MEDIUM,\n              };\n            }),\n          }))\n        : [];\n    } else {\n      const routes = quoteResponse?.trade?.routes || [];\n      return routes.map((route) => ({\n        percentage: (route.percent / 100).toString(),\n        swaps: route.pools.map((pool, idx) => ({\n          sellToken: tokenMap?.[`${route.path[idx].wrapped.address}-${false}`],\n          buyToken:\n            tokenMap?.[`${route.path[idx + 1].wrapped.address}-${false}`],\n          feeTier:\n            pool.type === PoolType.V3\n              ? (Number(pool.fee) as FeeAmount)\n              : FeeAmount.PCS_V3_MEDIUM,\n        })),\n      }));\n    }\n  }, [ammEnum, quoteResponse, tokenMap, typeField]);\n\n  return (\n    <>\n      <SwapContainer>\n        <SwapInputWrapper gap={wrapperGap}>\n          <SwapInput\n            title=\"\"\n            token={payToken}\n            price={payToken?.price ?? \"\"}\n            value={payAmount}\n            showMax={true}\n            showAddToken={false}\n            noBorder={true}\n            showBalance={isConnected}\n            openTokenSelectModal={() => {\n              setIsPayToken(true);\n              toggleSelectTokenModal(true);\n            }}\n            onValueChange={(value) => {\n              setIsRouteSyncing(true);\n              if (typeField !== \"pay\") setTypeField(\"pay\");\n              setPayAmount(value);\n            }}\n            loading={typeField === \"receive\" && isQuoteLoading}\n            disabled={\n              isBalanceMutating || isSwapTxnLoading || isWaitSwapTxnLoading\n            }\n            decimalScale={payToken?.decimals}\n          />\n          <DivideDiv>\n            <DivideY />\n            <SwapButton\n              onClick={handleSwitch}\n              disabled={\n                isBalanceMutating || isSwapTxnLoading || isWaitSwapTxnLoading\n              }\n            >\n              <SwapButtonIcon\n                disabled={\n                  isBalanceMutating || isSwapTxnLoading || isWaitSwapTxnLoading\n                }\n              />\n            </SwapButton>\n          </DivideDiv>\n          <SwapInput\n            title=\"\"\n            token={receiveToken}\n            price={receiveToken?.price ?? \"\"}\n            value={receiveAmount}\n            showMax={false}\n            noBorder={true}\n            showAddToken={\n              // Show button to add token to metamask wallet\n              (connector?.id as ConnectionType) === ConnectionType.METAMASK\n            }\n            showBalance={isConnected}\n            openTokenSelectModal={() => {\n              setIsPayToken(false);\n              toggleSelectTokenModal(true);\n            }}\n            onValueChange={(value) => {\n              setIsRouteSyncing(true);\n              if (typeField !== \"receive\") setTypeField(\"receive\");\n              setReceiveAmount(value);\n            }}\n            openAddTokenPopup={async () => {\n              window.ethereum.request({\n                method: \"wallet_watchAsset\",\n                params: {\n                  type: \"ERC20\",\n                  options: {\n                    address: receiveToken.address,\n                    symbol: receiveToken.ticker,\n                    decimals: receiveToken.decimals,\n                    //@ts-ignore\n                    image: receiveToken.Icon.props.src,\n                  },\n                },\n              });\n            }}\n            loading={typeField === \"pay\" && isQuoteLoading}\n            disabled={\n              isBalanceMutating || isSwapTxnLoading || isWaitSwapTxnLoading\n            }\n            priceImpact={priceImpact}\n            decimalScale={receiveToken?.decimals}\n          />\n        </SwapInputWrapper>\n        {payToken && receiveToken && (isQuoteLoading || !!quoteResponse) && (\n          <ExchangeWrapper>\n            <ExchangeRate\n              isLoading={isRouteSyncing || isQuoteLoading}\n              sellToken={{\n                ticker: payToken.ticker,\n                price: payToken.price ?? \"\",\n                exchangeRate:\n                  bigDecimal.compareTo(payAmount, 0) !== 0\n                    ? bigDecimal.divide(receiveAmount, payAmount, 18)\n                    : \"\",\n              }}\n              buyToken={{\n                ticker: receiveToken.ticker,\n                price: receiveToken.price ?? \"\",\n                exchangeRate:\n                  bigDecimal.compareTo(receiveAmount, 0) !== 0\n                    ? bigDecimal.divide(payAmount, receiveAmount, 18)\n                    : \"\",\n              }}\n              networkFee={!isEstimating ? networkFee : undefined}\n              priceImpact={priceImpact}\n              minOutput={\n                typeField === \"pay\"\n                  ? bigDecimal.multiply(\n                      receiveAmount,\n                      bigDecimal.subtract(\n                        1,\n                        settingsForm?.slippage ?? DEFAULT_SLIPPAGE\n                      )\n                    )\n                  : undefined\n              }\n              maxInput={\n                typeField === \"receive\"\n                  ? bigDecimal.multiply(\n                      payAmount,\n                      bigDecimal.add(\n                        1,\n                        settingsForm?.slippage ?? DEFAULT_SLIPPAGE\n                      )\n                    )\n                  : undefined\n              }\n              expectedOutput={receiveAmount}\n              swapFeeInfo={{\n                apertureFee:\n                  swapFee === 0 ? DEFAULT_APERTURE_SWAP_FEE : swapFee,\n                amount:\n                  !!payToken.price && payToken.price !== \"-\"\n                    ? bigDecimal.multiply(payToken.price, payAmount)\n                    : \"-\",\n                apertureFeeActive: swapFee > 0,\n              }}\n              priceRoutes={convertedRoute}\n              priceImpactWarning={\n                !!priceImpact &&\n                Math.abs(Number(priceImpact)) > DEFAULT_SWAP_WARNING_THRESHOLD\n                  ? priceImpact\n                  : undefined\n              }\n              amm={ammEnum}\n              networkName={getChainInfo(getNetworkName(networkId)).name}\n            />\n          </ExchangeWrapper>\n        )}\n        <ButtonWrapper>\n          <SwapBtn\n            key={payToken?.address}\n            typeField={typeField}\n            payToken={payToken}\n            receiveToken={receiveToken}\n            payAmount={payAmount}\n            receiveAmount={receiveAmount}\n            quoteResponse={quoteResponse}\n            isRouteSyncing={isRouteSyncing}\n            wrapTxn={wrapTxn}\n            isTxnLoading={\n              isBalanceMutating || isSwapTxnLoading || isWaitSwapTxnLoading\n            }\n            isEstimating={isEstimating}\n            transactionSettings={settingsForm}\n            setTxnLoading={setIsSwapTxnLoading}\n            swapTxnApproved={(swapTxnHash) => setSwapTxnHash(swapTxnHash)}\n            setGasEstimated={setGasEstimated}\n            setIsEstimating={setIsEstimating}\n          />\n        </ButtonWrapper>\n      </SwapContainer>\n      <Modal\n        isModalOpen={isOpen}\n        onClose={() => toggleSelectTokenModal(false)}\n        padding={20}\n      >\n        <TokenSelectModal\n          {...{\n            popularTokens: mockPopularTokens,\n            commonTokens: commonTokens,\n            selectedToken: isPayToken ? payToken : receiveToken,\n            selectToken: (token: IToken) =>\n              handleSelectToken(token, isPayToken),\n            selectUnknownToken: (token: IToken) => {\n              setTokenWarning({\n                token,\n                isPayToken,\n              });\n              toggleTokenWarningModal(true);\n            },\n            handleUnknownAddress,\n          }}\n        />\n      </Modal>\n      <Modal\n        isModalOpen={isTokenWarningOpen}\n        onClose={() => toggleTokenWarningModal(false)}\n        padding={20}\n        closeIcon={false}\n      >\n        <TokenWarningContent\n          {...{\n            amm: ammEnum,\n            token: tokenWarning?.token,\n            exploreURL: getExplorerURL(networkId),\n            confirmClick: (token: IToken) => {\n              handleSelectToken(token, tokenWarning?.isPayToken);\n              // Add new warning token with the useLocalStorageState in the web app\n              mutateWarningTokens(\n                networkId,\n                new Token(\n                  networkId,\n                  token.address,\n                  token.decimals,\n                  token.ticker,\n                  token.name\n                )\n              );\n              toggleTokenWarningModal(false);\n            },\n            cancelClick: () => toggleTokenWarningModal(false),\n          }}\n        />\n      </Modal>\n    </>\n  );\n};\n\nexport default SwapToken;\n","import { useNetwork } from \"@/components/NetworkContext/NetworkContext\";\nimport { DEFAULT_SLIPPAGE, WARNING_SLIPPAGE } from \"@/utils/helper\";\nimport SwapToken from \"@/views/Swap\";\nimport { Container, Header } from \"@/views/Swap/style\";\nimport { IconDiv, PageContainer } from \"@/views/style\";\nimport {\n  Headline1,\n  ITransactionSettingsForm,\n  MainCard,\n  TransactionSettings,\n} from \"@aperture/uikit\";\nimport { useLocalStorageState } from \"ahooks\";\nimport styled from \"styled-components\";\nimport { useAccount } from \"wagmi\";\n\nconst StyledPageContainer = styled(PageContainer)`\n  max-width: 1080px;\n  min-height: calc(100vh - 223px);\n  margin-top: 0px;\n  padding-top: 73px;\n  justify-content: center;\n`;\nconst SwapCard = styled(MainCard)`\n  position: relative;\n  max-width: 480px;\n  background: ${({ theme }) => theme.colors.global.background.BG1};\n  border-radius: 16px;\n  border: 1px solid ${({ theme }) => theme.colors.global.line.Line1};\n`;\nconst HeadTitle = styled.div`\n  position: absolute;\n  left: 24px;\n  top: 0;\n  transform: translateY(-50%);\n`;\nconst TitleText = styled(Headline1)`\n  font-family: \"Dunbar Tall\";\n  font-weight: 500;\n  color: ${({ theme }) => theme.colors.global.text.T1};\n`;\nconst UNITitle = styled.div`\n  font-family: \"Roboto Flex\";\n  font-weight: 400;\n  font-size: 14px;\n  line-height: 16px;\n  color: ${({ theme }) => theme.colors.global.text.T2};\n`;\nconst HeadlineWrapper = styled.div`\n  display: flex;\n  justify-content: space-between;\n  flex-direction: row;\n  align-items: center;\n  width: 100%;\n`;\nconst Santa = styled.img`\n  position: absolute;\n  left: calc(25% - 90px);\n  bottom: 101px;\n`;\nconst Lights = styled.img`\n  position: absolute;\n  right: 0px;\n  bottom: 62px;\n`;\nconst Hat = styled.img`\n  position: absolute;\n  top: -42px;\n  right: -50px;\n`;\n\nexport default function Swap() {\n  const { amm, networkId } = useNetwork();\n  const { address } = useAccount();\n  const [transactionSettings, setTransactionSettings] =\n    useLocalStorageState<ITransactionSettingsForm>(\n      `swap-transaction-settings-${networkId}-${address}`,\n      { defaultValue: { slippage: DEFAULT_SLIPPAGE, deadline: \"\" } }\n    );\n\n  return (\n    <StyledPageContainer>\n      <SwapCard>\n        <HeadTitle>\n          <TitleText>SWAP</TitleText>\n        </HeadTitle>\n        <Container>\n          <Header>\n            <HeadlineWrapper>\n              {amm && (\n                <IconDiv width={100} height={16}>\n                  <amm.Icon width={16} height={16} />\n                  <UNITitle>{amm.name}</UNITitle>\n                </IconDiv>\n              )}\n              <TransactionSettings\n                defaultSlippage={DEFAULT_SLIPPAGE}\n                settingsForm={transactionSettings}\n                warningSlippage={WARNING_SLIPPAGE}\n                onFormChange={(form: any) => setTransactionSettings(form)}\n                buttonSize={\"small\"}\n                isBorderless={true}\n              />\n            </HeadlineWrapper>\n          </Header>\n          <SwapToken wrapperGap={30} settingsForm={transactionSettings} />\n        </Container>\n      </SwapCard>\n    </StyledPageContainer>\n  );\n}\n","import { AccessoryIcons } from \"@aperture/assetkit\";\nimport { Headline5 } from \"@aperture/uikit\";\nimport styled from \"styled-components\";\n\nexport const Container = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  box-sizing: border-box;\n  gap: ${({ theme }) => theme.spacing[\"3xl\"]};\n`;\n\nexport const Subtitle = styled(Headline5)`\n  color: ${({ theme }) => theme.colors.grey.darkGrey2};\n  margin-bottom: 16px;\n  span:first-child {\n    margin-right: 4px;\n  }\n`;\n\nexport const Header = styled.div`\n  box-sizing: border-box;\n  width: 100%;\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: center;\n`;\n\nexport const HeadlineWrapper = styled.div`\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  gap: ${({ theme }) => theme.spacing.xl};\n`;\n\nexport const SwapContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  box-sizing: border-box;\n  width: 100%;\n  border-radius: ${({ theme }) => theme.radii.md};\n  gap: ${({ theme }) => theme.spacing[\"2xl\"]};\n  position: relative;\n  overflow: auto;\n`;\n\nexport const SwapInputWrapper = styled.div<{ gap?: number }>`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  box-sizing: border-box;\n  width: 100%;\n  gap: ${({ gap }) => gap || 0}px;\n  position: relative;\n`;\n\nexport const ExchangeWrapper = styled.div`\n  width: 100%;\n`;\n\nexport const SwapButton = styled.button<{ disabled: boolean }>`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  width: 48px;\n  height: 48px;\n  cursor: ${({ disabled }) => (disabled ? \"default\" : \"pointer\")};\n  border-radius: ${({ theme }) => theme.radii.round};\n  background: ${({ theme }) => theme.colors.global.primary};\n  border: 0;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translateY(-50%) translateX(-50%);\n`;\n\nexport const SwapButtonIcon = styled(AccessoryIcons.ExchangeIcon2)<{\n  disabled: boolean;\n}>`\n  transform: rotate(0deg);\n  transition: transform ${({ theme }) => theme.transitions.default} ease;\n  fill: ${({ theme }) => theme.colors.global.textAlt.T1};\n`;\n\nexport const ButtonWrapper = styled.div`\n  display: flex;\n  width: 100%;\n\n  > div {\n    width: 100%;\n  }\n`;\n\nexport const DivideDiv = styled.div`\n  position: relative;\n  height: 100%;\n  width: 100%;\n  padding: 2px 0;\n`;\n\nexport const DivideY = styled.div`\n  border: 1px solid ${({ theme }) => theme.colors.global.line.Line1};\n`;\n"],"names":["window","__NEXT_P","push","__webpack_require__","TokenSelectModal","commonTokens","selectedToken","selectToken","selectUnknownToken","handleUnknownAddress","customClose","onClose","param","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsx","TokenSelectContent","useMutateWarningTokens","networkId","useNetwork","mutate","tokenBalanceMutate","useFetchUserTokensBalance","updateTokenMap","useAllChainStateStore","mutateWarningTokens","useEventCallback","chainId","token","tokens","Array","isArray","mutateWarningTokensByAddress","tokenAddress","addresses","viem","getPublicClient","undefined","TradeState","QuoteMethod","RouterPreference","TradeFillType","QuoteState","PoolType","SwapRouterNativeAssets","URAQuoteType","LOADING","INVALID","STALE","NO_ROUTE_FOUND","VALID","ROUTING_API","CLIENT_SIDE","CLIENT_SIDE_FALLBACK","X","API","CLIENT","Classic","UniswapX","ClassicTrade","Trade","totalGasUseEstimateUSD","approveInfo","needsApprove","gasUseEstimateUSD","approveGasEstimateUSD","constructor","blockNumber","isUniswapXBetter","requestId","quoteMethod","routes","fillType","SUCCESS","NOT_FOUND","V2Pool","V3Pool","MATIC","BNB","AVAX","ETH","CLASSIC","DUTCH_LIMIT","parsePoolOrPair","pool","type","parsePool","parsePair","isVersionedRoute","route","every","parseToken","address","decimals","symbol","Token","parseInt","toString","fee","sqrtRatioX96","liquidity","tickCurrent","tokenIn","tokenOut","Pool","reserve0","reserve1","Pair","CurrencyAmount","quotient","getUniswapCallData","payToken","receiveToken","quoteResponse","typeField","swapOptions","currencyIn","native","ticker","name","currencyOut","computeRoutes","length","_routes__","_routes__1","map","rawAmountIn","amountIn","rawAmountOut","amountOut","isOnlyV2","isOnlyV3","routev3","V3Route","routev2","V2Route","mixedRoute","MixedRouteSDK","inputAmount","outputAmount","e","getLogger","error","errorMessage","message","classicTrade","v2Routes","filter","r","v3Routes","mixedRoutes","tradeType","Number","quoteId","calldata","value","SwapRouter","to","getAMMInfo","swapRouter","getPanCakeSwapCallData","trade","PCSRouter","gasEstimate","gasUseEstimate","slippageTolerance","Percent","numerator","denominator","recipient","deadlineOrPreviousBlockhash","SwapBtnComponent","payAmount","receiveAmount","isWrap","isUnwrap","isRouteSyncing","wrapTxn","isTxnLoading","isEstimating","isGasLoading","transactionSettings","setTxnLoading","swapTxnApproved","setGasEstimated","setIsEstimating","setIsGasLoading","isConnected","walletAddress","useAccount","publicClient","amm","network","addSnackbar","useSnackbarV2","tx","setTx","useState","gasError","setGasError","isWrapTokenPair","generateTx","swapFee","getApertureFeeForSwap","numberToPercent","slippage","bigDecimal","Date","now","deadline","FEE_RECIPIENT","baseTx","data","BigInt","logData","estimateGas","from","then","l2GasAmount","totalGasCost","gas","calculateGasMargin","debug","catch","details","JSON","stringify","detail","getBlockNumber","payTokenBalance","getTokenBalance","beforeGenerateTxError","useMemo","E_AMM","amount","concat","useEffect","ready","sendTransactionAsync","isPending","useSendTransactionWithGas","handleSwap","hash","isUserRejected","includes","info","status","jsx_runtime","Button","variant","color","size","width","onClick","disabled","jsxs","Fragment","Spinner","ApproveAndSwapBtn","getChainInfo","props","approved","setApproved","ammEnum","contractAddress","amms","isNative","ApproveTokenBtn","approveOnChange","approve","useNative","SwapBtn","memo","getTrade","rawAmount","client","v3Pools","V4Router","clientProvider","currencyA","currencyB","pools","TradeType","gasPriceWei","getGasPrice","candidatePools","getQuoteV2","tokenDecimals","rateAfterFee","parseUnits","quoteDecimals","toExact","price","gasUseEstimateQuote","toFixed","quote","STABLE_COINS_FOR_FEE","isStableCoin","DEFAULT_APERTURE_SWAP_FEE","SwapToken","settingsForm","wrapperGap","isChainSupported","connector","state","setModalState","useModal","isOpen","E_ModalKey","isPayToken","setIsPayToken","isTokenWarningOpen","tokenWarning","setTokenWarning","tokenMap","useFetchTokenMap","startTransition","useTransition","setTypeField","isBalanceMutating","setIsBalanceMutating","setIsRouteSyncing","setPayToken","setReceiveToken","setPayAmount","setReceiveAmount","setWrapTxn","swapTxnHash","setSwapTxnHash","isSwapTxnLoading","setIsSwapTxnLoading","waitSwapTxnData","isLoading","isWaitSwapTxnLoading","isSuccess","isWaitSwapTxnSuccess","useWaitForTransaction","gasEstimated","nativeCurrency","updateHeight","useResize","resetSwapInput","Object","values","sort","a","b","mockPopularTokens","toLowerCase","run","runQuote","loading","isQuoteLoading","cancel","cancelQuote","useRequest","isWrappedTokens","isWrappedTokenPair","isValidTokenPair","isTokensEquivalent","Math","pow","console","log","isError","context","payTokenAddr","receiveTokenAddr","pairKey","join","warn","manual","debounceWait","pollingInterval","priceImpact","pay","receive","networkFee","formatUnits","gasUSD","wrapped","gasAmount","handleSelectToken","handleSwitch","toggleSelectTokenModal","storedPayInfo","storedReceiveInfo","fetchUnknownToken","open","toggleTokenWarningModal","transaction","successMsg","failureMsg","feeAmount","swapFeeUSD","txHash","mutateTokenBalance","convertedRoute","percentage","poolInRoute","swaps","sellToken","swap","buyToken","feeTier","FeeAmount","percent","idx","path","SwapContainer","SwapInputWrapper","gap","SwapInput","title","showMax","showAddToken","noBorder","showBalance","openTokenSelectModal","onValueChange","decimalScale","DivideDiv","DivideY","SwapButton","SwapButtonIcon","id","ConnectionType","openAddTokenPopup","ethereum","request","method","params","options","image","Icon","src","ExchangeWrapper","ExchangeRate","exchangeRate","minOutput","DEFAULT_SLIPPAGE","maxInput","expectedOutput","swapFeeInfo","apertureFee","apertureFeeActive","priceRoutes","priceImpactWarning","abs","DEFAULT_SWAP_WARNING_THRESHOLD","networkName","getNetworkName","ButtonWrapper","Modal","isModalOpen","padding","popularTokens","closeIcon","TokenWarningContent","exploreURL","getExplorerURL","confirmClick","cancelClick","StyledPageContainer","styled","PageContainer","SwapCard","MainCard","theme","colors","global","background","BG1","line","Line1","HeadTitle","TitleText","Headline1","text","T1","UNITitle","T2","HeadlineWrapper","Swap","setTransactionSettings","useLocalStorageState","defaultValue","Container","Header","IconDiv","height","TransactionSettings","defaultSlippage","warningSlippage","WARNING_SLIPPAGE","onFormChange","form","buttonSize","isBorderless","spacing","Headline5","grey","darkGrey2","xl","radii","md","round","primary","AccessoryIcons","withConfig","transitions","default","textAlt"],"sourceRoot":""}