UNPKG

@rarimo/swap

Version:

Internal tools that other Rarimo packages use to swap tokens.

44 lines (43 loc) 2.61 kB
import { isOneElementArray } from "@rarimo/shared"; import { SwapperMultiplePaymentOptsEmptyError } from "../../../errors"; import { getBridgeData } from "./bridge"; import { encodeCommandPayload, getIsBridgingRequired, getIsWrappedOrUnwrappedRequired } from "./helpers"; import { getSameChainBundleData } from "./same-chain"; import { getSwapData } from "./swap"; import { getTransferData } from "./transfer"; export const getExecuteData = (args)=>{ return isOneElementArray(args.swapOpts) ? getExecuteDataSingle(args) : getExecuteDataMultiple(args); }; const getExecuteDataMultiple = ({ swapOpts , intermediateOpts , chainTo , chainFrom , receiver , bundle , isWrapped , multiplePaymentsOpts })=>{ if (!multiplePaymentsOpts) throw new SwapperMultiplePaymentOptsEmptyError(); const { amountOut , to } = multiplePaymentsOpts || {}; const isBridgingRequired = getIsBridgingRequired(chainFrom, chainTo); const data = [ ...swapOpts.map((i)=>getSwapData(isBridgingRequired, i, receiver, bundle)).flat(), ...getBridgeData(isBridgingRequired, intermediateOpts, chainTo, to, amountOut, receiver, bundle, isWrapped), ...getSameChainBundleData(isBridgingRequired, bundle), ...swapOpts.map((i)=>getTransferData(i.from, receiver)).flat(), ...getTransferData(to, receiver) ]; return encodeCommandPayload(data); }; const getExecuteDataSingle = ({ swapOpts , chainFrom , chainTo , bundle , intermediateOpts , isWrapped , receiver })=>{ // for the case of single execute, there will be only one item in the array const swapArgs = swapOpts[0]; const { from , to , amountIn , amountOut } = swapArgs; const { isUnwrapRequired , isWrapRequired } = getIsWrappedOrUnwrappedRequired(from, to); const isWrappedOrUnwrapped = isWrapRequired || isUnwrapRequired; const isBridgingRequired = getIsBridgingRequired(chainFrom, chainTo); // If token was wrapped\unwrapped thus amount for bridging equals to amountIn // and amountOut could be undefined otherwise if token was swapped, we need // to take amountOut as amount for bridging\transferring const amount = isWrappedOrUnwrapped ? amountIn : amountOut; return encodeCommandPayload([ ...getSwapData(isBridgingRequired, swapOpts[0], receiver, bundle), ...getBridgeData(isBridgingRequired, intermediateOpts, chainTo, to, amount, receiver, bundle, isWrapped), ...getSameChainBundleData(isBridgingRequired, bundle), ...getTransferData(from, receiver), ...getTransferData(to, receiver) ]); }; //# sourceMappingURL=index.js.map