UNPKG

@velora-dex/sdk

Version:
154 lines (137 loc) 4.72 kB
import type { ConstructProviderFetchInput } from '../../types'; import { BuildDeltaOrderDataParams, BuildDeltaOrderFunctions, constructBuildDeltaOrder, } from './buildDeltaOrder'; import { constructPostDeltaOrder, DeltaOrderApiResponse, DeltaOrderToPost, PostDeltaOrderFunctions, } from './postDeltaOrder'; import { constructSignDeltaOrder, SignDeltaOrderFunctions, } from './signDeltaOrder'; import { GetDeltaContractFunctions, constructGetDeltaContract, } from './getDeltaContract'; import { constructGetDeltaPrice, GetDeltaPriceFunctions, } from './getDeltaPrice'; import { constructGetDeltaOrders, GetDeltaOrdersFunctions, } from './getDeltaOrders'; import { constructGetPartnerFee, GetPartnerFeeFunctions, } from './getPartnerFee'; import { ApproveTokenForDeltaFunctions, constructApproveTokenForDelta, } from './approveForDelta'; import { constructGetBridgeInfo, GetBridgeInfoFunctions, } from './getBridgeInfo'; import { constructIsTokenSupportedInDelta, IsTokenSupportedInDeltaFunctions, } from './isTokenSupportedInDelta'; import { CancelDeltaOrderFunctions, constructCancelDeltaOrder, } from './cancelDeltaOrder'; import { constructPreSignDeltaOrder, PreSignDeltaOrderFunctions, } from './preSignDeltaOrder'; export type SubmitDeltaOrderParams = BuildDeltaOrderDataParams & { /** @description designates the Order as being able to be partially filled, as opposed to fill-or-kill */ partiallyFillable?: boolean; /** @description Referrer address */ referrerAddress?: string; } & Pick<DeltaOrderToPost, 'type' | 'includeAgents' | 'excludeAgents'>; type SubmitDeltaOrder = ( orderParams: SubmitDeltaOrderParams ) => Promise<DeltaOrderApiResponse>; export type SubmitDeltaOrderFuncs = { submitDeltaOrder: SubmitDeltaOrder; }; export const constructSubmitDeltaOrder = ( options: ConstructProviderFetchInput<any, 'signTypedDataCall'> ): SubmitDeltaOrderFuncs => { const { buildDeltaOrder } = constructBuildDeltaOrder(options); // in the normal submitOrderFlow preSign tx is not involved const { signDeltaOrder } = constructSignDeltaOrder(options); const { postDeltaOrder } = constructPostDeltaOrder(options); const submitDeltaOrder: SubmitDeltaOrder = async (orderParams) => { const orderData = await buildDeltaOrder(orderParams); const signature = await signDeltaOrder(orderData); const response = await postDeltaOrder({ signature, partner: orderParams.partner, order: orderData.data, partiallyFillable: orderParams.partiallyFillable, referrerAddress: orderParams.referrerAddress, type: orderParams.type, includeAgents: orderParams.includeAgents, excludeAgents: orderParams.excludeAgents, }); return response; }; return { submitDeltaOrder }; }; export type DeltaOrderHandlers<T> = SubmitDeltaOrderFuncs & ApproveTokenForDeltaFunctions<T> & BuildDeltaOrderFunctions & GetDeltaOrdersFunctions & GetDeltaPriceFunctions & GetDeltaContractFunctions & GetPartnerFeeFunctions & GetBridgeInfoFunctions & IsTokenSupportedInDeltaFunctions & PostDeltaOrderFunctions & SignDeltaOrderFunctions & PreSignDeltaOrderFunctions<T> & CancelDeltaOrderFunctions; /** @description construct SDK with every Delta Order-related method, fetching from API and Order signing */ export const constructAllDeltaOrdersHandlers = <TxResponse>( options: ConstructProviderFetchInput< TxResponse, 'signTypedDataCall' | 'transactCall' > ): DeltaOrderHandlers<TxResponse> => { const deltaOrdersGetters = constructGetDeltaOrders(options); const deltaOrdersContractGetter = constructGetDeltaContract(options); const deltaPrice = constructGetDeltaPrice(options); const partnerFee = constructGetPartnerFee(options); const bridgeInfo = constructGetBridgeInfo(options); const isTokenSupportedInDelta = constructIsTokenSupportedInDelta(options); const approveTokenForDelta = constructApproveTokenForDelta(options); const deltaOrdersSubmit = constructSubmitDeltaOrder(options); const deltaOrdersBuild = constructBuildDeltaOrder(options); const deltaOrdersSign = constructSignDeltaOrder(options); const deltaOrdersPreSign = constructPreSignDeltaOrder(options); const deltaOrdersPost = constructPostDeltaOrder(options); const deltaOrdersCancel = constructCancelDeltaOrder(options); return { ...deltaOrdersGetters, ...deltaOrdersContractGetter, ...deltaPrice, ...partnerFee, ...bridgeInfo, ...isTokenSupportedInDelta, ...approveTokenForDelta, ...deltaOrdersSubmit, ...deltaOrdersBuild, ...deltaOrdersSign, ...deltaOrdersPreSign, ...deltaOrdersPost, ...deltaOrdersCancel, }; };