UNPKG

@oraichain/oraidex-evm-sdk

Version:
52 lines 1.8 kB
import { z } from 'zod'; import { IRouter, TradeType, } from '../interfaces/IRouter'; const OSORRequestSchema = z.object({ sourceAsset: z.string(), sourceChainId: z.string(), destAsset: z.string(), destChainId: z.string(), offerAmount: z.string(), swapOptions: z.object({ protocols: z.array(z.union([ z.literal('Oraidex'), z.literal('OraidexV3'), z.literal('Osmosis'), ])), maxSplits: z.number().optional(), }), }); const defaultSwapOptions = { protocols: ['Oraidex', 'OraidexV3'], maxSplits: 1, }; export class OsorRouter extends IRouter { constructor(osorUrl, apiClient) { super(); this.osorUrl = osorUrl; this.apiClient = apiClient; } async route(amount, quoteCurrency, swapType = TradeType.EXACT_INPUT, swapOptions = defaultSwapOptions) { if (swapType === TradeType.EXACT_INPUT) { const requestBody = { sourceAsset: amount.currency.address, sourceChainId: amount.currency.chainId, destAsset: quoteCurrency.address, destChainId: quoteCurrency.chainId, offerAmount: amount.amount, swapOptions, }; const validatedRequestBody = this._validateRequestBody(requestBody); const res = await this.apiClient.post(this.osorUrl, validatedRequestBody); const smartRouteData = res.data; return smartRouteData; } else { throw new Error('Exact output have not supported yet'); } } _validateRequestBody(requestBody) { const validateData = OSORRequestSchema.parse(requestBody); return validateData; } } //# sourceMappingURL=OsorRouter.js.map