diff --git a/src/components/SwapForm/hooks/useGetRoute.ts b/src/components/SwapForm/hooks/useGetRoute.ts index 2905ae6ff6..54978c1977 100644 --- a/src/components/SwapForm/hooks/useGetRoute.ts +++ b/src/components/SwapForm/hooks/useGetRoute.ts @@ -146,10 +146,13 @@ const useGetRoute = (args: ArgsGetRoute) => { const params: GetRouteParams = { tokenIn: tokenInAddress, tokenOut: tokenOutAddress, + tokenInDecimals: currencyIn.decimals, + tokenOutDecimals: currencyOut.decimals, amountIn, includedSources: dexes, gasInclude: 'true', // default gasPrice: '', // default + chainId, ...feeConfigParams, } diff --git a/src/services/route/index.ts b/src/services/route/index.ts index 8984d75c5b..bc115e9937 100644 --- a/src/services/route/index.ts +++ b/src/services/route/index.ts @@ -2,6 +2,8 @@ import { createApi } from '@reduxjs/toolkit/query/react' import { baseQueryOauthDynamic } from 'services/baseQueryOauth' import { BuildRoutePayload, BuildRouteResponse } from 'services/route/types/buildRoute' +import { BFF_API } from 'constants/env' + import { GetRouteParams, GetRouteResponse } from './types/getRoute' const routeApi = createApi({ @@ -27,6 +29,27 @@ const routeApi = createApi({ 'x-client-id': clientId || 'kyberswap', }, }), + async transformResponse(baseResponse: GetRouteResponse, _meta, { params }): Promise { + if (baseResponse?.data?.routeSummary && params.chainId && params.tokenInDecimals && params.tokenOutDecimals) { + const priceImpactResponse = await fetch( + `${BFF_API}/v1/price-impact?tokenIn=${params.tokenIn}&tokenInDecimal=${params.tokenInDecimals}&tokenOut=${params.tokenOut}&tokenOutDecimal=${params.tokenOutDecimals}&amountIn=${baseResponse.data.routeSummary.amountIn}&amountOut=${baseResponse.data.routeSummary.amountOut}&chainId=${params.chainId}`, + ).then(res => res.json()) + if (priceImpactResponse?.data?.amountInUSD && priceImpactResponse?.data?.amountOutUSD) + return { + ...baseResponse, + data: { + ...baseResponse.data, + routeSummary: { + ...baseResponse.data.routeSummary, + amountInUsd: priceImpactResponse.data.amountInUSD, + amountOutUsd: priceImpactResponse.data.amountOutUSD, + }, + }, + } + } + + return baseResponse + }, }), buildRoute: builder.mutation< BuildRouteResponse, diff --git a/src/services/route/types/getRoute.ts b/src/services/route/types/getRoute.ts index 0f8867b4d0..9dc4958abb 100644 --- a/src/services/route/types/getRoute.ts +++ b/src/services/route/types/getRoute.ts @@ -14,6 +14,10 @@ export type GetRouteParams = { isInBps?: string feeReceiver?: string debug?: string + // for calculating price impact only + chainId?: number + tokenInDecimals?: number + tokenOutDecimals?: number } export type RouteSummary = {