99 validateRequest ,
1010} from "@/common/utils/httpHandlers"
1111import { log , logProd , logRouteTime } from "@/common/utils/logs"
12- import { findSwaps } from "@/swapService/runner"
12+ import { findSwaps , reflectProviders } from "@/swapService/runner"
1313import type { SwapParams } from "@/swapService/types"
1414import {
1515 ApiError ,
@@ -21,9 +21,12 @@ import { StatusCodes } from "http-status-codes"
2121import { InvalidAddressError } from "viem"
2222import { z } from "zod"
2323import {
24+ type ProvidersResponse ,
2425 type SwapResponse ,
2526 type SwapResponseSingle ,
27+ getProvidersSchema ,
2628 getSwapSchema ,
29+ providersResponseSchema ,
2730 swapResponseSchema ,
2831 swapResponseSchemaSingle ,
2932} from "./swapModel"
@@ -49,6 +52,35 @@ swapRegistry.registerPath({
4952 responses : createApiResponse ( swapResponseSchema , "Success" ) ,
5053} )
5154
55+ swapRegistry . register ( "Providers" , providersResponseSchema )
56+ swapRegistry . registerPath ( {
57+ method : "get" ,
58+ path : "/providers" ,
59+ tags : [ "Get providers available for the queried chain" ] ,
60+ request : { query : getProvidersSchema . shape . query } ,
61+ responses : createApiResponse ( providersResponseSchema , "Success" ) ,
62+ } )
63+
64+ swapRouter . get (
65+ "/providers" ,
66+ validateRequest ( getProvidersSchema ) ,
67+ async ( req : Request , res : Response ) => {
68+ try {
69+ const {
70+ query : { chainId } ,
71+ } = getProvidersSchema . parse ( req )
72+ const providers = await reflectProviders ( chainId )
73+
74+ return handleServiceResponse (
75+ ServiceResponse . success < ProvidersResponse > ( providers ) ,
76+ res ,
77+ )
78+ } catch ( error ) {
79+ return handleServiceResponse ( createFailureResponse ( req , error ) , res )
80+ }
81+ } ,
82+ )
83+
5284swapRouter . get (
5385 "/swap" ,
5486 validateRequest ( getSwapSchema ) ,
0 commit comments