@oraichain/oraidex-evm-sdk
Version:
Oraidex EVM SDK
52 lines • 1.8 kB
JavaScript
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