@velora-dex/sdk
Version:
63 lines (53 loc) • 2.05 kB
text/typescript
import { API_URL } from '../../constants';
import { constructSearchString } from '../../helpers/misc';
import type { ConstructFetchInput, RequestParameters } from '../../types';
import type { DeltaOrderType, OnChainOrderMap } from './helpers/types';
import type { DeltaAuction } from './types';
export type DeltaOrderToPost<T extends keyof OnChainOrderMap = 'Order'> = {
/** @description Partner string */
partner?: string;
/** @description Referrer address */
referrerAddress?: string;
order: OnChainOrderMap[T];
/** @description Signature of the order from order.owner address. EOA signatures must be submitted in ERC-2098 Compact Representation. */
signature: string;
chainId: number;
/** @description Designates the Order as being able to be partially filled, as opposed to fill-or-kill */
partiallyFillable?: boolean;
/** @description Type of the order. MARKET or LIMIT. Default is MARKET */
type?: DeltaOrderType;
includeAgents?: string[];
excludeAgents?: string[];
};
export type PostDeltaOrderParams = Omit<DeltaOrderToPost, 'chainId'> & {
degenMode?: boolean;
};
type PostDeltaOrder = (
postData: PostDeltaOrderParams,
requestParams?: RequestParameters
) => Promise<DeltaAuction<'Order'>>;
export type PostDeltaOrderFunctions = {
postDeltaOrder: PostDeltaOrder;
};
export const constructPostDeltaOrder = ({
apiURL = API_URL,
chainId,
fetcher,
}: ConstructFetchInput): PostDeltaOrderFunctions => {
const postOrderUrl = `${apiURL}/v2/delta/orders` as const;
const postDeltaOrder: PostDeltaOrder = (_postData, requestParams) => {
const { degenMode, ...postData } = _postData;
const deltaOrderToPost: DeltaOrderToPost = { ...postData, chainId };
const search = constructSearchString<{ degenMode?: boolean }>({
degenMode,
});
const fetchURL = `${postOrderUrl}${search}` as const;
return fetcher<DeltaAuction<'Order'>>({
url: fetchURL,
method: 'POST',
data: deltaOrderToPost,
requestParams,
});
};
return { postDeltaOrder };
};