@velora-dex/sdk
Version:
96 lines (88 loc) • 3.59 kB
text/typescript
import { API_URL } from '../../constants';
import type { ConstructFetchInput, RequestParameters } from '../../types';
import type { ExternalDeltaOrder } from './helpers/types';
import type { BuiltDeltaOrder, DeltaRoute } from './types';
export type { BuiltDeltaOrder } from './types';
export type BuildExternalDeltaOrderParams = {
/** @description The address of the order owner */
owner: string;
/** @description The address of the external handler contract */
handler: string;
/** @description Protocol-specific encoded bytes for the external handler */
data: string;
/** @description The address of the order beneficiary. Defaults to owner. */
beneficiary?: string;
/** @description The deadline for the order (unix seconds) */
deadline?: number;
/** @description The nonce of the order. Random if omitted. */
nonce?: string;
/** @description Optional permit signature for the src token. Defaults to "0x". */
permit?: string;
/** @description Partner string. Passed to the server to resolve partner fee details. */
partner?: string;
/** @description Partner fee in basis points (bps), 50bps=0.5% */
partnerFeeBps?: number;
/** @description Partner address */
partnerAddress?: string;
/** @description Take surplus flag */
partnerTakesSurplus?: boolean;
/** @description Whether the surplus should be capped. True by default. */
capSurplus?: boolean;
/** @description Metadata for the order, hex string */
metadata?: string;
/** @description Designates the Order as partially fillable. Default false. */
partiallyFillable?: boolean;
/** @description DeltaRoute from getDeltaPrice */
route: DeltaRoute;
/** @description Order side. SELL or BUY. */
side: 'SELL' | 'BUY';
/** @description Slippage in basis points (bps). Default 0. */
slippage?: number;
/** @description If passed, the server will use this as SELL destAmount (as BUY srcAmount) and expectedAmount */
limitAmount?: string;
};
type BuildExternalDeltaOrder = (
buildOrderParams: BuildExternalDeltaOrderParams,
requestParams?: RequestParameters
) => Promise<BuiltDeltaOrder<ExternalDeltaOrder>>;
export type BuildExternalDeltaOrderFunctions = {
/** @description Build a Delta v2 External Order from a DeltaRoute via the server endpoint, ready to sign and post. */
buildExternalDeltaOrder: BuildExternalDeltaOrder;
};
export const constructBuildExternalDeltaOrder = (
options: ConstructFetchInput
): BuildExternalDeltaOrderFunctions => {
const { apiURL = API_URL, fetcher } = options;
const buildUrl = `${apiURL}/v2/delta/orders/build` as const;
const buildExternalDeltaOrder: BuildExternalDeltaOrder = async (
params,
requestParams
) =>
fetcher<BuiltDeltaOrder<ExternalDeltaOrder>>({
url: buildUrl,
method: 'POST',
data: {
side: params.side,
route: params.route,
owner: params.owner,
handler: params.handler,
data: params.data,
beneficiary: params.beneficiary,
deadline: params.deadline,
nonce: params.nonce,
permit: params.permit,
slippage: params.slippage,
limitAmount: params.limitAmount,
metadata: params.metadata,
partiallyFillable: params.partiallyFillable,
partner: params.partner,
partnerAddress: params.partnerAddress,
partnerFeeBps: params.partnerFeeBps,
partnerTakesSurplus: params.partnerTakesSurplus,
capSurplus: params.capSurplus,
orderType: 'ExternalOrder',
},
requestParams,
});
return { buildExternalDeltaOrder };
};