@velora-dex/sdk
Version:
75 lines (65 loc) • 1.8 kB
text/typescript
import { API_URL } from '../../constants';
import type { ConstructFetchInput, RequestParameters } from '../../types';
import { constructBaseFetchUrlGetter, PostOrderURLs } from './helpers/misc';
import type {
LimitOrderApiResponse,
LimitOrderToSend,
LimitOrderFromApi,
LimitOrderType,
} from './helpers/types';
type PostLimitOrder = (
limitOrderWithSignatureAndPermit: LimitOrderToSend,
requestParams?: RequestParameters
) => Promise<LimitOrderFromApi>;
export type PostLimitOrderFunctions = {
postLimitOrder: PostLimitOrder;
postP2POrder: PostLimitOrder;
};
export const constructPostLimitOrder = ({
apiURL = API_URL,
chainId,
fetcher,
}: ConstructFetchInput): PostLimitOrderFunctions => {
const getBaseFetchURLByOrderType = constructBaseFetchUrlGetter({
apiURL,
chainId,
});
const postTypedOrder = async (
limitOrderWithSignatureAndPermit: LimitOrderToSend,
type: LimitOrderType,
requestParams?: RequestParameters
): Promise<LimitOrderFromApi> => {
const fetchURL = getBaseFetchURLByOrderType(type);
const { order: newOrder } = await fetcher<
LimitOrderApiResponse,
PostOrderURLs
>({
url: fetchURL,
method: 'POST',
data: limitOrderWithSignatureAndPermit,
requestParams,
});
return newOrder;
};
const postLimitOrder: PostLimitOrder = (
limitOrderWithSignatureAndPermit,
requestParams
) => {
return postTypedOrder(
limitOrderWithSignatureAndPermit,
'LIMIT',
requestParams
);
};
const postP2POrder: PostLimitOrder = (
limitOrderWithSignatureAndPermit,
requestParams
) => {
return postTypedOrder(
limitOrderWithSignatureAndPermit,
'P2P',
requestParams
);
};
return { postLimitOrder, postP2POrder };
};