Commit 5f64149f authored by Zach Pomerantz's avatar Zach Pomerantz Committed by GitHub

feat: trace quote (#6160)

* feat: trace quote

* fix: include more data
parent 7115729e
...@@ -5,6 +5,7 @@ import { RPC_PROVIDERS } from 'constants/providers' ...@@ -5,6 +5,7 @@ import { RPC_PROVIDERS } from 'constants/providers'
import { getClientSideQuote, toSupportedChainId } from 'lib/hooks/routing/clientSideSmartOrderRouter' import { getClientSideQuote, toSupportedChainId } from 'lib/hooks/routing/clientSideSmartOrderRouter'
import ms from 'ms.macro' import ms from 'ms.macro'
import qs from 'qs' import qs from 'qs'
import { trace } from 'tracing'
import { GetQuoteResult } from './types' import { GetQuoteResult } from './types'
...@@ -64,15 +65,7 @@ const PRICE_PARAMS = { ...@@ -64,15 +65,7 @@ const PRICE_PARAMS = {
distributionPercent: 100, distributionPercent: 100,
} }
export const routingApi = createApi({ interface GetQuoteArgs {
reducerPath: 'routingApi',
baseQuery: fetchBaseQuery({
baseUrl: 'https://api.uniswap.org/v1/',
}),
endpoints: (build) => ({
getQuote: build.query<
GetQuoteResult,
{
tokenInAddress: string tokenInAddress: string
tokenInChainId: ChainId tokenInChainId: ChainId
tokenInDecimals: number tokenInDecimals: number
...@@ -84,14 +77,47 @@ export const routingApi = createApi({ ...@@ -84,14 +77,47 @@ export const routingApi = createApi({
amount: string amount: string
routerPreference: RouterPreference routerPreference: RouterPreference
type: 'exactIn' | 'exactOut' type: 'exactIn' | 'exactOut'
}
export const routingApi = createApi({
reducerPath: 'routingApi',
baseQuery: fetchBaseQuery({
baseUrl: 'https://api.uniswap.org/v1/',
}),
endpoints: (build) => ({
getQuote: build.query<GetQuoteResult, GetQuoteArgs>({
async onQueryStarted(args: GetQuoteArgs, { queryFulfilled }) {
trace(
'quote',
async ({ setTraceError, setTraceStatus }) => {
try {
await queryFulfilled
} catch (error: unknown) {
if (error && typeof error === 'object' && 'error' in error) {
const queryError = (error as Record<'error', FetchBaseQueryError>).error
if (typeof queryError.status === 'number') {
setTraceStatus(queryError.status)
}
setTraceError(queryError)
} else {
throw error
} }
>({ }
},
{
data: {
...args,
isPrice: args.routerPreference === RouterPreference.PRICE,
isAutoRouter: args.routerPreference === RouterPreference.API,
},
tags: { is_widget: false },
}
)
},
async queryFn(args, _api, _extraOptions, fetch) { async queryFn(args, _api, _extraOptions, fetch) {
const { tokenInAddress, tokenInChainId, tokenOutAddress, tokenOutChainId, amount, routerPreference, type } = const { tokenInAddress, tokenInChainId, tokenOutAddress, tokenOutChainId, amount, routerPreference, type } =
args args
let result
try { try {
if (routerPreference === RouterPreference.API) { if (routerPreference === RouterPreference.API) {
const query = qs.stringify({ const query = qs.stringify({
...@@ -103,10 +129,10 @@ export const routingApi = createApi({ ...@@ -103,10 +129,10 @@ export const routingApi = createApi({
amount, amount,
type, type,
}) })
result = await fetch(`quote?${query}`) return (await fetch(`quote?${query}`)) as { data: GetQuoteResult } | { error: FetchBaseQueryError }
} else { } else {
const router = getRouter(args.tokenInChainId) const router = getRouter(args.tokenInChainId)
result = await getClientSideQuote( return await getClientSideQuote(
args, args,
router, router,
// TODO(zzmp): Use PRICE_PARAMS for RouterPreference.PRICE. // TODO(zzmp): Use PRICE_PARAMS for RouterPreference.PRICE.
...@@ -114,12 +140,10 @@ export const routingApi = createApi({ ...@@ -114,12 +140,10 @@ export const routingApi = createApi({
CLIENT_PARAMS CLIENT_PARAMS
) )
} }
} catch (error) {
return { data: result.data as GetQuoteResult }
} catch (e) {
// TODO: fall back to client-side quoter when auto router fails. // TODO: fall back to client-side quoter when auto router fails.
// deprecate 'legacy' v2/v3 routers first. // deprecate 'legacy' v2/v3 routers first.
return { error: e as FetchBaseQueryError } return { error: { status: 'CUSTOM_ERROR', error: error.toString(), data: error } }
} }
}, },
keepUnusedDataFor: ms`10s`, keepUnusedDataFor: ms`10s`,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment