@orderly.network/hooks 1.5.15 → 1.5.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -256,7 +256,7 @@ export function useOrderEntry(symbolOrOrder, sideOrOptions, reduceOnly, options)
256
256
  ...data
257
257
  })).then((res)=>{
258
258
  // resolve(res);
259
- if (res.success) {
259
+ if (res && res.success) {
260
260
  // TODO: remove when the WS service is fixed
261
261
  // if (Array.isArray(res.data.rows)) {
262
262
  // ee.emit("algoOrder:cache", {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/orderly/useOrderEntry.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { \n API,\n OrderEntity,\n OrderSide,\n OrderType,\n SDKError,\n} from \"@orderly.network/types\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { Decimal, getPrecisionByNumber } from \"@orderly.network/utils\";\nimport { useMutation } from \"../useMutation\";\nimport { compose, head, includes, omit, pick } from \"ramda\";\nimport {\n baseInputHandle,\n getCalculateHandler,\n orderEntityFormatHandle,\n} from \"../utils/orderEntryHelper\";\nimport { useCollateral } from \"./useCollateral\";\nimport { useMaxQty } from \"./useMaxQty\";\n// import { availableOrderTypes } from \"../utils/createOrder\";\nimport { useMarkPrice } from \"./useMarkPrice\";\nimport { order as orderUtils } from \"@orderly.network/perp\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { useDebouncedCallback } from \"use-debounce\";\nimport { OrderFactory } from \"../services/orderCreator/factory\";\n// import { VerifyResult } from \"../utils/createOrder\";\n\nexport type UseOrderEntryOptions = {\n commify?: boolean;\n // Whether to observe the orderbook, if it is a limit order, the orderbook will automatically calculate the est. liq. price when it is updated.\n watchOrderbook?: boolean;\n validate?: (\n data: OrderEntity\n ) => { [P in keyof OrderEntity]?: string } | null | undefined;\n};\n\nexport type UseOrderEntryMetaState = {\n errors:\n | { [P in keyof OrderEntity]?: { type: string; message: string } }\n | null\n | undefined;\n dirty: { [P in keyof OrderEntity]?: boolean } | null | undefined;\n submitted: boolean;\n};\n\nexport type UseOrderEntryReturn = {\n // Maximum open position\n maxQty: number;\n freeCollateral: number;\n markPrice: number;\n estLiqPrice?: number | null;\n estLeverage?: number | null;\n //@Deprecated\n onSubmit: (order: OrderEntity) => Promise<any>;\n submit: () => Promise<OrderEntity>;\n // order: data,\n submitting: boolean;\n formattedOrder: Partial<OrderEntity>;\n helper: {\n calculate: (\n values: Partial<OrderEntity>,\n field: keyof OrderEntity,\n value: any\n ) => Partial<OrderEntity>;\n validator: (values: Partial<OrderEntity>) => any;\n // clearErrors: () => void;\n // setValues: (values: Partial<OrderEntity>) => void;\n };\n // formState: any;\n metaState: UseOrderEntryMetaState;\n symbolConfig: API.SymbolExt;\n};\n\nexport type OrderParams = Required<\n Pick<OrderEntity, \"side\" | \"order_type\" | \"symbol\">\n> &\n Partial<Omit<OrderEntity, \"side\" | \"symbol\" | \"order_type\">>;\n\n/**\n * Create Order\n * @example\n * ```tsx\n * import { useOrderEntry } from \"@orderly.network/hooks\";\n * import {OrderSide, OrderType} from '@orderly.network/types';\n *\n * const { formattedOrder, onSubmit, helper } = useOrderEntry({\n * symbol: \"PERP_ETH_USDC\",\n * side: OrderSide.BUY,\n * order_type: OrderType.LIMIT,\n * order_price: 10000,\n * order_quantity: 1,\n * },{\n * // **Note:** it's required\n * watchOrderbook: true,\n * });\n * ```\n */\nexport function useOrderEntry(\n order: OrderParams,\n options?: UseOrderEntryOptions\n): UseOrderEntryReturn;\n/**\n * @deprecated\n */\nexport function useOrderEntry(\n symbol: string,\n side: OrderSide,\n reduceOnly: boolean\n): UseOrderEntryReturn;\nexport function useOrderEntry(\n symbolOrOrder: string | OrderParams,\n sideOrOptions?: OrderSide | UseOrderEntryOptions,\n reduceOnly?: boolean,\n options?: UseOrderEntryOptions\n): UseOrderEntryReturn {\n // if symbolOrOrder is string, then it's deprecated\n let isNewVersion = false;\n if (typeof symbolOrOrder === \"object\") {\n isNewVersion = true;\n\n if (!symbolOrOrder.symbol) {\n throw new SDKError(\"symbol is required\");\n }\n\n if (!symbolOrOrder.side) {\n throw new SDKError(\"Order side is required\");\n }\n\n if (!symbolOrOrder.order_type) {\n throw new SDKError(\"order_type is required\");\n }\n }\n\n const prevOrderData = useRef<Partial<OrderEntity> | null>(null);\n // Cache data from the last calculate\n const orderDataCache = useRef<Partial<OrderEntity> | null>(null);\n //\n const notSupportData = useRef<Partial<OrderEntity>>({});\n\n const [errors, setErrors] = useState<any>(null);\n\n const ee = useEventEmitter();\n\n const fieldDirty = useRef<{ [K in keyof OrderEntity]?: boolean }>({});\n const submitted = useRef<boolean>(false);\n const askAndBid = useRef<number[]>([]); // 0: ask0, 1: bid0\n\n const onOrderbookUpdate = useDebouncedCallback((data: number[]) => {\n askAndBid.current = data;\n }, 200);\n\n const { freeCollateral, totalCollateral, positions, accountInfo } =\n useCollateral();\n\n const symbolInfo = useSymbolsInfo();\n // const tokenInfo = useTokenInfo();\n\n const symbol = useMemo(() => {\n if (typeof symbolOrOrder === \"string\") {\n return symbolOrOrder;\n }\n return symbolOrOrder.symbol!;\n }, [symbolOrOrder]);\n\n const optionsValue = useMemo(() => {\n if (typeof sideOrOptions === \"object\") {\n return sideOrOptions;\n }\n\n return options;\n }, [sideOrOptions]);\n\n const isReduceOnly = useMemo<boolean>(() => {\n if (typeof reduceOnly === \"boolean\") {\n return reduceOnly;\n }\n\n if (typeof symbolOrOrder === \"object\") {\n return !!symbolOrOrder.reduce_only;\n }\n\n return false;\n }, [symbolOrOrder, reduceOnly]);\n\n const sideValue = useMemo(() => {\n if (typeof symbolOrOrder === \"object\") {\n return symbolOrOrder.side;\n }\n\n // if (typeof sideOrOptions === \"string\") {\n return sideOrOptions as OrderSide;\n // }\n }, [symbolOrOrder, sideOrOptions]);\n\n const baseDP = useMemo(\n () => getPrecisionByNumber(symbolInfo[symbol](\"base_tick\", 0)),\n [symbolInfo]\n );\n const quoteDP = useMemo(() => {\n return getPrecisionByNumber(symbolInfo[symbol](\"quote_tick\", 0));\n }, [symbolInfo]);\n\n const baseIMR = useMemo(\n () => symbolInfo[symbol](\"base_imr\", 0),\n [symbolInfo]\n );\n const baseMMR = useMemo(\n () => symbolInfo[symbol](\"base_mmr\", 0),\n [symbolInfo]\n );\n\n const { data: markPrice } = useMarkPrice(symbol);\n // const markPrice = 1;\n\n const diffOrderEntry = (\n prev: Partial<OrderParams>,\n current: Partial<OrderParams>\n ): { key: keyof OrderParams; value: any; preValue: any } | null => {\n if (!prev) return null;\n let key, value, preValue;\n const keys = Object.keys(current) as (keyof OrderParams)[];\n\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n\n let preveValue = prev[k];\n let currentValue = current[k];\n\n if (\n typeof preveValue === \"undefined\" &&\n typeof currentValue === \"undefined\"\n )\n continue;\n\n // if (k === \"order_quantity\") {\n // preveValue = Number(preveValue);\n // currentValue = Number(currentValue);\n // }\n\n if (preveValue !== currentValue) {\n key = k;\n value = currentValue;\n preValue = preveValue;\n break;\n }\n }\n\n if (!key) return null;\n\n return { key, value, preValue };\n };\n\n const maxQty = useMaxQty(symbol, sideValue, isReduceOnly);\n\n const parseString2Number = (\n order: OrderParams & Record<string, any>,\n key: keyof OrderParams,\n dp?: number,\n ) => {\n if (typeof order[key] !== \"string\") return;\n // fix: delete the comma then remove the forward one of the string\n // first find the difference between current value and previous value\n\n if (order[key] && (order[key] as string).startsWith(\".\")) {\n (order[key] as string) = `0${order[key]}`;\n }\n\n // order[`${key}_origin`] = order[key];\n (order[key] as string) = (order[key] as string).replace(/,/g, \"\");\n\n // format input by decimal precision\n if (dp && (order[key] as string).length > 0) {\n const hasPoint = `${order[key]}`.includes(\".\");\n const endOfPoint = `${order[key]}`.endsWith(\".\");\n const decimalPart = `${order[key]}`.split(\".\");\n if (hasPoint && !endOfPoint) {\n (order[key] as string) = `${decimalPart[0]}.${decimalPart[1].slice(0,quoteDP)}`;\n }\n }\n };\n\n // just for performance optimization\n const needParse = useMemo(() => {\n if (typeof symbolOrOrder === \"string\") {\n return null;\n }\n return pick([\n \"order_price\",\n \"side\",\n \"order_quantity\",\n \"visible_quantity\",\n \"order_type\",\n \"order_type_ext\",\n \"symbol\",\n \"total\",\n \"reduce_only\",\n \"trigger_price\",\n ])(\n //@ts-ignore\n symbolOrOrder\n );\n }, [symbolOrOrder]);\n\n const parsedData = useMemo<OrderParams | null>(() => {\n if (typeof symbolOrOrder === \"string\") {\n return null;\n }\n // clean comma\n\n if (typeof symbolOrOrder.order_quantity === \"string\") {\n parseString2Number(symbolOrOrder, \"order_quantity\");\n } else if (typeof symbolOrOrder.order_quantity === \"number\") {\n symbolOrOrder.order_quantity = new Decimal(symbolOrOrder.order_quantity)\n .toDecimalPlaces(baseDP)\n .toString();\n }\n\n if (typeof symbolOrOrder.order_price === \"string\") {\n parseString2Number(symbolOrOrder, \"order_price\", quoteDP);\n }\n\n if (typeof symbolOrOrder.total === \"string\") {\n parseString2Number(symbolOrOrder, \"total\", quoteDP);\n }\n\n if (typeof symbolOrOrder.trigger_price === \"string\") {\n parseString2Number(symbolOrOrder, \"trigger_price\", quoteDP);\n }\n\n // if (typeof symbolOrOrder.trigger_price === \"string\") {\n // symbolOrOrder.trigger_price = symbolOrOrder.trigger_price.replace(\n // /,/g,\n // \"\"\n // );\n // }\n\n return symbolOrOrder;\n }, [\n needParse?.order_price,\n needParse?.order_quantity,\n needParse?.total,\n needParse?.trigger_price,\n needParse?.order_type,\n needParse?.order_type_ext,\n needParse?.symbol,\n needParse?.reduce_only,\n needParse?.side,\n needParse?.visible_quantity,\n quoteDP,\n baseDP,\n ]);\n\n const isAlgoOrder =\n parsedData?.order_type === OrderType.STOP_LIMIT ||\n parsedData?.order_type === OrderType.STOP_MARKET ||\n parsedData?.order_type === OrderType.CLOSE_POSITION;\n\n const [doCreateOrder, { isMutating }] = useMutation<OrderEntity, any>(\n isAlgoOrder ? \"/v1/algo/order\" : \"/v1/order\"\n );\n\n // const maxQty = 3;\n\n const createOrder = (values: Partial<OrderEntity>): Promise<OrderEntity> => {\n if (!values.symbol) {\n throw new SDKError(\"symbol is error\");\n }\n\n if (!values.side) {\n throw new SDKError(\"side is error\");\n }\n\n if (!values || typeof values.order_type === \"undefined\") {\n throw new SDKError(\"order_type is error\");\n }\n\n const orderCreator = OrderFactory.create(\n // @ts-ignore\n values.order_type_ext ? values.order_type_ext : values.order_type\n );\n\n if (!orderCreator) {\n return Promise.reject(new SDKError(\"orderCreator is null\"));\n }\n\n \n\n return new Promise((resolve, reject) => {\n return orderCreator\n .validate(values, {\n symbol: symbolInfo[symbol](),\n // token: tokenInfo[symbol](),\n maxQty,\n markPrice: markPrice,\n })\n .then((errors: any) => {\n submitted.current = true;\n\n if (\n errors.order_price ||\n errors.order_quantity ||\n errors.trigger_price ||\n errors.total\n ) {\n setErrors(errors);\n reject(\n errors.order_price?.message || errors.order_quantity?.message\n );\n // throw new SDKError(\n // errors.order_price?.message ||\n // errors.order_quantity?.message ||\n // \"order validation error\"\n // );\n } else {\n const data = orderCreator.create(values as OrderEntity, {\n symbol: symbolInfo[symbol](),\n maxQty,\n markPrice: markPrice,\n });\n\n // console.log(\"------------------\", values, data);\n\n return doCreateOrder(\n omit([\"order_type_ext\"], {\n // ...values,\n // ...omit([\"order_price\"], values),\n ...data,\n })\n ).then((res) => {\n // resolve(res);\n if (res.success) {\n // TODO: remove when the WS service is fixed\n\n // if (Array.isArray(res.data.rows)) {\n // ee.emit(\"algoOrder:cache\", {\n // ...res.data.rows[0],\n // trigger_price: data.trigger_price,\n // });\n // }\n\n resolve(res.data);\n } else {\n reject(res);\n }\n }, reject);\n }\n });\n });\n };\n\n /**\n * submit form,validate values\n * @param values\n * @returns\n */\n const onSubmit = (values: OrderEntity) => {\n if (typeof reduceOnly === \"boolean\" && reduceOnly && !values.reduce_only) {\n return Promise.reject(\n new SDKError(\n \"The reduceOny parameter of hook does not match your order data\"\n )\n );\n }\n return createOrder({\n ...values,\n symbol,\n });\n };\n\n const submit = useCallback(() => {\n if (!parsedData) {\n throw new SDKError(\"Function is not supported, please use onSubmit()\");\n }\n return createOrder(parsedData);\n }, [parsedData]);\n\n const calculate = useCallback(\n (\n values: Partial<OrderEntity>,\n field: keyof OrderEntity,\n value: any\n ): Partial<OrderEntity> => {\n const fieldHandler = getCalculateHandler(field);\n const newValues = compose(\n head,\n orderEntityFormatHandle(baseDP, quoteDP),\n fieldHandler,\n baseInputHandle\n )([values, field, value, markPrice, { baseDP, quoteDP }]);\n\n return newValues as Partial<OrderEntity>;\n },\n [markPrice]\n );\n\n // const estLiqPrice = useMemo(() => {}, []);\n\n const validator = (values: any) => {\n // @ts-ignore\n const creator = OrderFactory.create(values.order_type);\n\n return creator?.validate(values, {\n symbol: symbolInfo[symbol](),\n // token: tokenInfo[symbol](),\n maxQty,\n markPrice: markPrice,\n });\n };\n\n const formattedOrder = useMemo<Partial<OrderEntity>>(() => {\n if (!parsedData) {\n return notSupportData.current;\n }\n // prevOrderData.current = symbolOrOrder;\n\n if (!prevOrderData.current) {\n // prevOrderData.current = {\n // ...symbolOrOrder,\n // total: \"\",\n // };\n\n prevOrderData.current = parsedData;\n orderDataCache.current = {\n ...parsedData,\n total: \"\",\n };\n\n return orderDataCache.current as Partial<OrderEntity>;\n }\n\n // diff order entry\n const item = diffOrderEntry(prevOrderData.current, parsedData);\n\n // console.log(prevOrderData.current, symbolOrOrder, item);\n // console.log(item);\n\n if (!item) {\n return orderDataCache.current as Partial<OrderEntity>;\n }\n\n // set field dirty\n if (typeof parsedData.order_price !== \"undefined\") {\n fieldDirty.current.order_price = true;\n }\n if (typeof parsedData.order_quantity !== \"undefined\") {\n fieldDirty.current.order_quantity = true;\n }\n\n const values = calculate(parsedData, item.key, item.value);\n\n values.isStopOrder = values.order_type?.startsWith(\"STOP\") || false;\n\n values.total = values.total || \"\";\n\n prevOrderData.current = parsedData;\n orderDataCache.current = values;\n\n return values;\n }, [parsedData, markPrice]);\n\n /// validator order info\n useEffect(() => {\n if (!markPrice || symbolInfo.isNil) return;\n // validate order data;\n validator(formattedOrder)\n ?.then((err) => {\n setErrors(err);\n })\n .catch((err) => {});\n }, [\n formattedOrder.broker_id,\n formattedOrder.order_quantity,\n formattedOrder.total,\n formattedOrder.trigger_price,\n formattedOrder.order_type,\n markPrice,\n ]);\n\n //====== update orderbook ask0/bid0 ======\n useEffect(() => {\n if (isNewVersion) {\n if (!optionsValue?.watchOrderbook) {\n throw new SDKError(\n \"In order to calculate the estimated liquidation price, the `options.watchOrderbook` parameter must be set to true.\"\n );\n }\n } else {\n if (!optionsValue?.watchOrderbook) {\n return;\n }\n }\n\n ee.on(\"orderbook:update\", onOrderbookUpdate);\n\n return () => {\n ee.off(\"orderbook:update\", onOrderbookUpdate);\n };\n }, [optionsValue?.watchOrderbook]);\n\n useEffect(() => {\n askAndBid.current = [];\n }, [parsedData?.symbol]);\n\n //====== end ======\n\n const getPriceAndQty = (\n symbolOrOrder: OrderEntity\n ): { quantity: number; price: number } | null => {\n let quantity = Number(symbolOrOrder.order_quantity);\n const orderPrice = Number(symbolOrOrder.order_price);\n\n if (isNaN(quantity) || quantity <= 0) {\n return null;\n }\n\n if (!!options?.watchOrderbook && askAndBid.current.length === 0) {\n throw new SDKError(\n \"Please check if you are using the `useOrderbookStream` hook or if the orderBook has data.\"\n );\n }\n\n if (\n (symbolOrOrder.order_type === OrderType.LIMIT ||\n symbolOrOrder.order_type === OrderType.STOP_LIMIT) &&\n isNaN(orderPrice)\n )\n return null;\n\n /**\n * price\n * if order_type = market order,\n order side = long, then order_price_i = ask0\n order side = short, then order_price_i = bid0\n if order_type = limit order\n order side = long\n limit_price >= ask0, then order_price_i = ask0\n limit_price < ask0, then order_price_i = limit_price\n order side = short\n limit_price <= bid0, then order_price_i = bid0\n limit_price > ask0, then order_price_i = ask0\n */\n let price: number | undefined;\n\n if (\n symbolOrOrder.order_type === OrderType.MARKET ||\n symbolOrOrder.order_type === OrderType.STOP_MARKET\n ) {\n if (symbolOrOrder.side === OrderSide.BUY) {\n price = askAndBid.current[0];\n } else {\n price = askAndBid.current[1];\n }\n } else {\n // LIMIT order\n if (symbolOrOrder.side === OrderSide.BUY) {\n if (orderPrice >= askAndBid.current[0]) {\n price = askAndBid.current[0];\n } else {\n price = orderPrice;\n }\n } else {\n if (orderPrice <= askAndBid.current[1]) {\n price = askAndBid.current[1];\n } else {\n price = orderPrice;\n }\n }\n }\n\n if (symbolOrOrder.side === OrderSide.SELL) {\n quantity = -quantity;\n }\n\n return { price, quantity };\n };\n\n const estLiqPrice = useMemo(() => {\n if (!accountInfo || !parsedData || !markPrice) return null;\n\n const result = getPriceAndQty(formattedOrder as OrderEntity);\n if (result === null) return null;\n const { price, quantity } = result;\n if (!price || !quantity) return null;\n\n const orderFee = orderUtils.orderFee({\n qty: quantity,\n price,\n futuresTakeFeeRate: Number(accountInfo[\"futures_taker_fee_rate\"]) / 10000,\n });\n\n const liqPrice = orderUtils.estLiqPrice({\n markPrice,\n baseIMR,\n baseMMR,\n totalCollateral,\n positions,\n IMR_Factor: accountInfo[\"imr_factor\"][symbol],\n orderFee,\n newOrder: {\n qty: quantity,\n price,\n symbol: parsedData.symbol!,\n },\n });\n\n // console.log(\"********\", liqPrice, markPrice, totalCollateral, result);\n\n if (liqPrice <= 0) return null;\n\n return liqPrice;\n }, [\n markPrice,\n baseIMR,\n baseMMR,\n totalCollateral,\n formattedOrder?.order_price,\n formattedOrder?.order_quantity,\n formattedOrder?.total,\n formattedOrder?.trigger_price,\n accountInfo,\n ]);\n\n const estLeverage = useMemo(() => {\n if (!accountInfo || !parsedData) return null;\n const result = getPriceAndQty(formattedOrder as OrderEntity);\n if (result === null || !result.price || !result.quantity) return null;\n\n const leverage = orderUtils.estLeverage({\n totalCollateral,\n positions,\n newOrder: {\n symbol: parsedData.symbol,\n qty: result.quantity,\n price: result.price,\n },\n });\n\n return leverage;\n }, [\n baseIMR,\n baseMMR,\n totalCollateral,\n positions,\n formattedOrder?.order_price,\n formattedOrder?.order_quantity,\n formattedOrder?.total,\n formattedOrder?.trigger_price,\n ]);\n\n return {\n maxQty,\n freeCollateral,\n markPrice,\n onSubmit,\n submit,\n submitting: isMutating,\n formattedOrder,\n // errors,\n estLiqPrice,\n estLeverage,\n helper: {\n calculate,\n validator,\n // clearErrors,\n },\n metaState: {\n dirty: fieldDirty.current,\n submitted: submitted.current,\n errors,\n },\n symbolConfig: symbolInfo[symbol](),\n };\n}\n"],"names":["useCallback","useEffect","useMemo","useRef","useState","OrderSide","OrderType","SDKError","useSymbolsInfo","Decimal","getPrecisionByNumber","useMutation","compose","head","omit","pick","baseInputHandle","getCalculateHandler","orderEntityFormatHandle","useCollateral","useMaxQty","useMarkPrice","order","orderUtils","useEventEmitter","useDebouncedCallback","OrderFactory","useOrderEntry","symbolOrOrder","sideOrOptions","reduceOnly","options","isNewVersion","symbol","side","order_type","prevOrderData","orderDataCache","notSupportData","errors","setErrors","ee","fieldDirty","submitted","askAndBid","onOrderbookUpdate","data","current","freeCollateral","totalCollateral","positions","accountInfo","symbolInfo","optionsValue","isReduceOnly","reduce_only","sideValue","baseDP","quoteDP","baseIMR","baseMMR","markPrice","diffOrderEntry","prev","key","value","preValue","keys","Object","i","length","k","preveValue","currentValue","maxQty","parseString2Number","dp","startsWith","replace","hasPoint","includes","endOfPoint","endsWith","decimalPart","split","slice","needParse","parsedData","order_quantity","toDecimalPlaces","toString","order_price","total","trigger_price","order_type_ext","visible_quantity","isAlgoOrder","STOP_LIMIT","STOP_MARKET","CLOSE_POSITION","doCreateOrder","isMutating","createOrder","values","orderCreator","create","Promise","reject","resolve","validate","then","message","res","success","onSubmit","submit","calculate","field","fieldHandler","newValues","validator","creator","formattedOrder","item","isStopOrder","isNil","err","catch","broker_id","watchOrderbook","on","off","getPriceAndQty","quantity","Number","orderPrice","isNaN","LIMIT","price","MARKET","BUY","SELL","estLiqPrice","result","orderFee","qty","futuresTakeFeeRate","liqPrice","IMR_Factor","newOrder","estLeverage","leverage","submitting","helper","metaState","dirty","symbolConfig"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../src/orderly/useOrderEntry.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n API,\n OrderEntity,\n OrderSide,\n OrderType,\n SDKError,\n} from \"@orderly.network/types\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { Decimal, getPrecisionByNumber } from \"@orderly.network/utils\";\nimport { useMutation } from \"../useMutation\";\nimport { compose, head, includes, omit, pick } from \"ramda\";\nimport {\n baseInputHandle,\n getCalculateHandler,\n orderEntityFormatHandle,\n} from \"../utils/orderEntryHelper\";\nimport { useCollateral } from \"./useCollateral\";\nimport { useMaxQty } from \"./useMaxQty\";\n// import { availableOrderTypes } from \"../utils/createOrder\";\nimport { useMarkPrice } from \"./useMarkPrice\";\nimport { order as orderUtils } from \"@orderly.network/perp\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { useDebouncedCallback } from \"use-debounce\";\nimport { OrderFactory } from \"../services/orderCreator/factory\";\n// import { VerifyResult } from \"../utils/createOrder\";\n\nexport type UseOrderEntryOptions = {\n commify?: boolean;\n // Whether to observe the orderbook, if it is a limit order, the orderbook will automatically calculate the est. liq. price when it is updated.\n watchOrderbook?: boolean;\n validate?: (\n data: OrderEntity\n ) => { [P in keyof OrderEntity]?: string } | null | undefined;\n};\n\nexport type UseOrderEntryMetaState = {\n errors:\n | { [P in keyof OrderEntity]?: { type: string; message: string } }\n | null\n | undefined;\n dirty: { [P in keyof OrderEntity]?: boolean } | null | undefined;\n submitted: boolean;\n};\n\nexport type UseOrderEntryReturn = {\n // Maximum open position\n maxQty: number;\n freeCollateral: number;\n markPrice: number;\n estLiqPrice?: number | null;\n estLeverage?: number | null;\n //@Deprecated\n onSubmit: (order: OrderEntity) => Promise<any>;\n submit: () => Promise<OrderEntity>;\n // order: data,\n submitting: boolean;\n formattedOrder: Partial<OrderEntity>;\n helper: {\n calculate: (\n values: Partial<OrderEntity>,\n field: keyof OrderEntity,\n value: any\n ) => Partial<OrderEntity>;\n validator: (values: Partial<OrderEntity>) => any;\n // clearErrors: () => void;\n // setValues: (values: Partial<OrderEntity>) => void;\n };\n // formState: any;\n metaState: UseOrderEntryMetaState;\n symbolConfig: API.SymbolExt;\n};\n\nexport type OrderParams = Required<\n Pick<OrderEntity, \"side\" | \"order_type\" | \"symbol\">\n> &\n Partial<Omit<OrderEntity, \"side\" | \"symbol\" | \"order_type\">>;\n\n/**\n * Create Order\n * @example\n * ```tsx\n * import { useOrderEntry } from \"@orderly.network/hooks\";\n * import {OrderSide, OrderType} from '@orderly.network/types';\n *\n * const { formattedOrder, onSubmit, helper } = useOrderEntry({\n * symbol: \"PERP_ETH_USDC\",\n * side: OrderSide.BUY,\n * order_type: OrderType.LIMIT,\n * order_price: 10000,\n * order_quantity: 1,\n * },{\n * // **Note:** it's required\n * watchOrderbook: true,\n * });\n * ```\n */\nexport function useOrderEntry(\n order: OrderParams,\n options?: UseOrderEntryOptions\n): UseOrderEntryReturn;\n/**\n * @deprecated\n */\nexport function useOrderEntry(\n symbol: string,\n side: OrderSide,\n reduceOnly: boolean\n): UseOrderEntryReturn;\nexport function useOrderEntry(\n symbolOrOrder: string | OrderParams,\n sideOrOptions?: OrderSide | UseOrderEntryOptions,\n reduceOnly?: boolean,\n options?: UseOrderEntryOptions\n): UseOrderEntryReturn {\n // if symbolOrOrder is string, then it's deprecated\n let isNewVersion = false;\n if (typeof symbolOrOrder === \"object\") {\n isNewVersion = true;\n\n if (!symbolOrOrder.symbol) {\n throw new SDKError(\"symbol is required\");\n }\n\n if (!symbolOrOrder.side) {\n throw new SDKError(\"Order side is required\");\n }\n\n if (!symbolOrOrder.order_type) {\n throw new SDKError(\"order_type is required\");\n }\n }\n\n const prevOrderData = useRef<Partial<OrderEntity> | null>(null);\n // Cache data from the last calculate\n const orderDataCache = useRef<Partial<OrderEntity> | null>(null);\n //\n const notSupportData = useRef<Partial<OrderEntity>>({});\n\n const [errors, setErrors] = useState<any>(null);\n\n const ee = useEventEmitter();\n\n const fieldDirty = useRef<{ [K in keyof OrderEntity]?: boolean }>({});\n const submitted = useRef<boolean>(false);\n const askAndBid = useRef<number[]>([]); // 0: ask0, 1: bid0\n\n const onOrderbookUpdate = useDebouncedCallback((data: number[]) => {\n askAndBid.current = data;\n }, 200);\n\n const { freeCollateral, totalCollateral, positions, accountInfo } =\n useCollateral();\n\n const symbolInfo = useSymbolsInfo();\n // const tokenInfo = useTokenInfo();\n\n const symbol = useMemo(() => {\n if (typeof symbolOrOrder === \"string\") {\n return symbolOrOrder;\n }\n return symbolOrOrder.symbol!;\n }, [symbolOrOrder]);\n\n const optionsValue = useMemo(() => {\n if (typeof sideOrOptions === \"object\") {\n return sideOrOptions;\n }\n\n return options;\n }, [sideOrOptions]);\n\n const isReduceOnly = useMemo<boolean>(() => {\n if (typeof reduceOnly === \"boolean\") {\n return reduceOnly;\n }\n\n if (typeof symbolOrOrder === \"object\") {\n return !!symbolOrOrder.reduce_only;\n }\n\n return false;\n }, [symbolOrOrder, reduceOnly]);\n\n const sideValue = useMemo(() => {\n if (typeof symbolOrOrder === \"object\") {\n return symbolOrOrder.side;\n }\n\n // if (typeof sideOrOptions === \"string\") {\n return sideOrOptions as OrderSide;\n // }\n }, [symbolOrOrder, sideOrOptions]);\n\n const baseDP = useMemo(\n () => getPrecisionByNumber(symbolInfo[symbol](\"base_tick\", 0)),\n [symbolInfo]\n );\n const quoteDP = useMemo(() => {\n return getPrecisionByNumber(symbolInfo[symbol](\"quote_tick\", 0));\n }, [symbolInfo]);\n\n const baseIMR = useMemo(\n () => symbolInfo[symbol](\"base_imr\", 0),\n [symbolInfo]\n );\n const baseMMR = useMemo(\n () => symbolInfo[symbol](\"base_mmr\", 0),\n [symbolInfo]\n );\n\n const { data: markPrice } = useMarkPrice(symbol);\n // const markPrice = 1;\n\n const diffOrderEntry = (\n prev: Partial<OrderParams>,\n current: Partial<OrderParams>\n ): { key: keyof OrderParams; value: any; preValue: any } | null => {\n if (!prev) return null;\n let key, value, preValue;\n const keys = Object.keys(current) as (keyof OrderParams)[];\n\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n\n let preveValue = prev[k];\n let currentValue = current[k];\n\n if (\n typeof preveValue === \"undefined\" &&\n typeof currentValue === \"undefined\"\n )\n continue;\n\n // if (k === \"order_quantity\") {\n // preveValue = Number(preveValue);\n // currentValue = Number(currentValue);\n // }\n\n if (preveValue !== currentValue) {\n key = k;\n value = currentValue;\n preValue = preveValue;\n break;\n }\n }\n\n if (!key) return null;\n\n return { key, value, preValue };\n };\n\n const maxQty = useMaxQty(symbol, sideValue, isReduceOnly);\n\n const parseString2Number = (\n order: OrderParams & Record<string, any>,\n key: keyof OrderParams,\n dp?: number\n ) => {\n if (typeof order[key] !== \"string\") return;\n // fix: delete the comma then remove the forward one of the string\n // first find the difference between current value and previous value\n\n if (order[key] && (order[key] as string).startsWith(\".\")) {\n (order[key] as string) = `0${order[key]}`;\n }\n\n // order[`${key}_origin`] = order[key];\n (order[key] as string) = (order[key] as string).replace(/,/g, \"\");\n\n // format input by decimal precision\n if (dp && (order[key] as string).length > 0) {\n const hasPoint = `${order[key]}`.includes(\".\");\n const endOfPoint = `${order[key]}`.endsWith(\".\");\n const decimalPart = `${order[key]}`.split(\".\");\n if (hasPoint && !endOfPoint) {\n (order[key] as string) = `${decimalPart[0]}.${decimalPart[1].slice(\n 0,\n quoteDP\n )}`;\n }\n }\n };\n\n // just for performance optimization\n const needParse = useMemo(() => {\n if (typeof symbolOrOrder === \"string\") {\n return null;\n }\n return pick([\n \"order_price\",\n \"side\",\n \"order_quantity\",\n \"visible_quantity\",\n \"order_type\",\n \"order_type_ext\",\n \"symbol\",\n \"total\",\n \"reduce_only\",\n \"trigger_price\",\n ])(\n //@ts-ignore\n symbolOrOrder\n );\n }, [symbolOrOrder]);\n\n const parsedData = useMemo<OrderParams | null>(() => {\n if (typeof symbolOrOrder === \"string\") {\n return null;\n }\n // clean comma\n\n if (typeof symbolOrOrder.order_quantity === \"string\") {\n parseString2Number(symbolOrOrder, \"order_quantity\");\n } else if (typeof symbolOrOrder.order_quantity === \"number\") {\n symbolOrOrder.order_quantity = new Decimal(symbolOrOrder.order_quantity)\n .toDecimalPlaces(baseDP)\n .toString();\n }\n\n if (typeof symbolOrOrder.order_price === \"string\") {\n parseString2Number(symbolOrOrder, \"order_price\", quoteDP);\n }\n\n if (typeof symbolOrOrder.total === \"string\") {\n parseString2Number(symbolOrOrder, \"total\", quoteDP);\n }\n\n if (typeof symbolOrOrder.trigger_price === \"string\") {\n parseString2Number(symbolOrOrder, \"trigger_price\", quoteDP);\n }\n\n // if (typeof symbolOrOrder.trigger_price === \"string\") {\n // symbolOrOrder.trigger_price = symbolOrOrder.trigger_price.replace(\n // /,/g,\n // \"\"\n // );\n // }\n\n return symbolOrOrder;\n }, [\n needParse?.order_price,\n needParse?.order_quantity,\n needParse?.total,\n needParse?.trigger_price,\n needParse?.order_type,\n needParse?.order_type_ext,\n needParse?.symbol,\n needParse?.reduce_only,\n needParse?.side,\n needParse?.visible_quantity,\n quoteDP,\n baseDP,\n ]);\n\n const isAlgoOrder =\n parsedData?.order_type === OrderType.STOP_LIMIT ||\n parsedData?.order_type === OrderType.STOP_MARKET ||\n parsedData?.order_type === OrderType.CLOSE_POSITION;\n\n const [doCreateOrder, { isMutating }] = useMutation<OrderEntity, any>(\n isAlgoOrder ? \"/v1/algo/order\" : \"/v1/order\"\n );\n\n // const maxQty = 3;\n\n const createOrder = (values: Partial<OrderEntity>): Promise<OrderEntity> => {\n if (!values.symbol) {\n throw new SDKError(\"symbol is error\");\n }\n\n if (!values.side) {\n throw new SDKError(\"side is error\");\n }\n\n if (!values || typeof values.order_type === \"undefined\") {\n throw new SDKError(\"order_type is error\");\n }\n\n const orderCreator = OrderFactory.create(\n // @ts-ignore\n values.order_type_ext ? values.order_type_ext : values.order_type\n );\n\n if (!orderCreator) {\n return Promise.reject(new SDKError(\"orderCreator is null\"));\n }\n\n return new Promise((resolve, reject) => {\n return orderCreator\n .validate(values, {\n symbol: symbolInfo[symbol](),\n // token: tokenInfo[symbol](),\n maxQty,\n markPrice: markPrice,\n })\n .then((errors: any) => {\n submitted.current = true;\n\n if (\n errors.order_price ||\n errors.order_quantity ||\n errors.trigger_price ||\n errors.total\n ) {\n setErrors(errors);\n reject(\n errors.order_price?.message || errors.order_quantity?.message\n );\n // throw new SDKError(\n // errors.order_price?.message ||\n // errors.order_quantity?.message ||\n // \"order validation error\"\n // );\n } else {\n const data = orderCreator.create(values as OrderEntity, {\n symbol: symbolInfo[symbol](),\n maxQty,\n markPrice: markPrice,\n });\n\n // console.log(\"------------------\", values, data);\n\n return doCreateOrder(\n omit([\"order_type_ext\"], {\n // ...values,\n // ...omit([\"order_price\"], values),\n ...data,\n })\n ).then((res) => {\n // resolve(res);\n if (res && res.success) {\n // TODO: remove when the WS service is fixed\n\n // if (Array.isArray(res.data.rows)) {\n // ee.emit(\"algoOrder:cache\", {\n // ...res.data.rows[0],\n // trigger_price: data.trigger_price,\n // });\n // }\n\n resolve(res.data);\n } else {\n reject(res);\n }\n }, reject);\n }\n });\n });\n };\n\n /**\n * submit form,validate values\n * @param values\n * @returns\n */\n const onSubmit = (values: OrderEntity) => {\n if (typeof reduceOnly === \"boolean\" && reduceOnly && !values.reduce_only) {\n return Promise.reject(\n new SDKError(\n \"The reduceOny parameter of hook does not match your order data\"\n )\n );\n }\n return createOrder({\n ...values,\n symbol,\n });\n };\n\n const submit = useCallback(() => {\n if (!parsedData) {\n throw new SDKError(\"Function is not supported, please use onSubmit()\");\n }\n return createOrder(parsedData);\n }, [parsedData]);\n\n const calculate = useCallback(\n (\n values: Partial<OrderEntity>,\n field: keyof OrderEntity,\n value: any\n ): Partial<OrderEntity> => {\n const fieldHandler = getCalculateHandler(field);\n const newValues = compose(\n head,\n orderEntityFormatHandle(baseDP, quoteDP),\n fieldHandler,\n baseInputHandle\n )([values, field, value, markPrice, { baseDP, quoteDP }]);\n\n return newValues as Partial<OrderEntity>;\n },\n [markPrice]\n );\n\n // const estLiqPrice = useMemo(() => {}, []);\n\n const validator = (values: any) => {\n // @ts-ignore\n const creator = OrderFactory.create(values.order_type);\n\n return creator?.validate(values, {\n symbol: symbolInfo[symbol](),\n // token: tokenInfo[symbol](),\n maxQty,\n markPrice: markPrice,\n });\n };\n\n const formattedOrder = useMemo<Partial<OrderEntity>>(() => {\n if (!parsedData) {\n return notSupportData.current;\n }\n // prevOrderData.current = symbolOrOrder;\n\n if (!prevOrderData.current) {\n // prevOrderData.current = {\n // ...symbolOrOrder,\n // total: \"\",\n // };\n\n prevOrderData.current = parsedData;\n orderDataCache.current = {\n ...parsedData,\n total: \"\",\n };\n\n return orderDataCache.current as Partial<OrderEntity>;\n }\n\n // diff order entry\n const item = diffOrderEntry(prevOrderData.current, parsedData);\n\n // console.log(prevOrderData.current, symbolOrOrder, item);\n // console.log(item);\n\n if (!item) {\n return orderDataCache.current as Partial<OrderEntity>;\n }\n\n // set field dirty\n if (typeof parsedData.order_price !== \"undefined\") {\n fieldDirty.current.order_price = true;\n }\n if (typeof parsedData.order_quantity !== \"undefined\") {\n fieldDirty.current.order_quantity = true;\n }\n\n const values = calculate(parsedData, item.key, item.value);\n\n values.isStopOrder = values.order_type?.startsWith(\"STOP\") || false;\n\n values.total = values.total || \"\";\n\n prevOrderData.current = parsedData;\n orderDataCache.current = values;\n\n return values;\n }, [parsedData, markPrice]);\n\n /// validator order info\n useEffect(() => {\n if (!markPrice || symbolInfo.isNil) return;\n // validate order data;\n validator(formattedOrder)\n ?.then((err) => {\n setErrors(err);\n })\n .catch((err) => {});\n }, [\n formattedOrder.broker_id,\n formattedOrder.order_quantity,\n formattedOrder.total,\n formattedOrder.trigger_price,\n formattedOrder.order_type,\n markPrice,\n ]);\n\n //====== update orderbook ask0/bid0 ======\n useEffect(() => {\n if (isNewVersion) {\n if (!optionsValue?.watchOrderbook) {\n throw new SDKError(\n \"In order to calculate the estimated liquidation price, the `options.watchOrderbook` parameter must be set to true.\"\n );\n }\n } else {\n if (!optionsValue?.watchOrderbook) {\n return;\n }\n }\n\n ee.on(\"orderbook:update\", onOrderbookUpdate);\n\n return () => {\n ee.off(\"orderbook:update\", onOrderbookUpdate);\n };\n }, [optionsValue?.watchOrderbook]);\n\n useEffect(() => {\n askAndBid.current = [];\n }, [parsedData?.symbol]);\n\n //====== end ======\n\n const getPriceAndQty = (\n symbolOrOrder: OrderEntity\n ): { quantity: number; price: number } | null => {\n let quantity = Number(symbolOrOrder.order_quantity);\n const orderPrice = Number(symbolOrOrder.order_price);\n\n if (isNaN(quantity) || quantity <= 0) {\n return null;\n }\n\n if (!!options?.watchOrderbook && askAndBid.current.length === 0) {\n throw new SDKError(\n \"Please check if you are using the `useOrderbookStream` hook or if the orderBook has data.\"\n );\n }\n\n if (\n (symbolOrOrder.order_type === OrderType.LIMIT ||\n symbolOrOrder.order_type === OrderType.STOP_LIMIT) &&\n isNaN(orderPrice)\n )\n return null;\n\n /**\n * price\n * if order_type = market order,\n order side = long, then order_price_i = ask0\n order side = short, then order_price_i = bid0\n if order_type = limit order\n order side = long\n limit_price >= ask0, then order_price_i = ask0\n limit_price < ask0, then order_price_i = limit_price\n order side = short\n limit_price <= bid0, then order_price_i = bid0\n limit_price > ask0, then order_price_i = ask0\n */\n let price: number | undefined;\n\n if (\n symbolOrOrder.order_type === OrderType.MARKET ||\n symbolOrOrder.order_type === OrderType.STOP_MARKET\n ) {\n if (symbolOrOrder.side === OrderSide.BUY) {\n price = askAndBid.current[0];\n } else {\n price = askAndBid.current[1];\n }\n } else {\n // LIMIT order\n if (symbolOrOrder.side === OrderSide.BUY) {\n if (orderPrice >= askAndBid.current[0]) {\n price = askAndBid.current[0];\n } else {\n price = orderPrice;\n }\n } else {\n if (orderPrice <= askAndBid.current[1]) {\n price = askAndBid.current[1];\n } else {\n price = orderPrice;\n }\n }\n }\n\n if (symbolOrOrder.side === OrderSide.SELL) {\n quantity = -quantity;\n }\n\n return { price, quantity };\n };\n\n const estLiqPrice = useMemo(() => {\n if (!accountInfo || !parsedData || !markPrice) return null;\n\n const result = getPriceAndQty(formattedOrder as OrderEntity);\n if (result === null) return null;\n const { price, quantity } = result;\n if (!price || !quantity) return null;\n\n const orderFee = orderUtils.orderFee({\n qty: quantity,\n price,\n futuresTakeFeeRate: Number(accountInfo[\"futures_taker_fee_rate\"]) / 10000,\n });\n\n const liqPrice = orderUtils.estLiqPrice({\n markPrice,\n baseIMR,\n baseMMR,\n totalCollateral,\n positions,\n IMR_Factor: accountInfo[\"imr_factor\"][symbol],\n orderFee,\n newOrder: {\n qty: quantity,\n price,\n symbol: parsedData.symbol!,\n },\n });\n\n // console.log(\"********\", liqPrice, markPrice, totalCollateral, result);\n\n if (liqPrice <= 0) return null;\n\n return liqPrice;\n }, [\n markPrice,\n baseIMR,\n baseMMR,\n totalCollateral,\n formattedOrder?.order_price,\n formattedOrder?.order_quantity,\n formattedOrder?.total,\n formattedOrder?.trigger_price,\n accountInfo,\n ]);\n\n const estLeverage = useMemo(() => {\n if (!accountInfo || !parsedData) return null;\n const result = getPriceAndQty(formattedOrder as OrderEntity);\n if (result === null || !result.price || !result.quantity) return null;\n\n const leverage = orderUtils.estLeverage({\n totalCollateral,\n positions,\n newOrder: {\n symbol: parsedData.symbol,\n qty: result.quantity,\n price: result.price,\n },\n });\n\n return leverage;\n }, [\n baseIMR,\n baseMMR,\n totalCollateral,\n positions,\n formattedOrder?.order_price,\n formattedOrder?.order_quantity,\n formattedOrder?.total,\n formattedOrder?.trigger_price,\n ]);\n\n return {\n maxQty,\n freeCollateral,\n markPrice,\n onSubmit,\n submit,\n submitting: isMutating,\n formattedOrder,\n // errors,\n estLiqPrice,\n estLeverage,\n helper: {\n calculate,\n validator,\n // clearErrors,\n },\n metaState: {\n dirty: fieldDirty.current,\n submitted: submitted.current,\n errors,\n },\n symbolConfig: symbolInfo[symbol](),\n };\n}\n"],"names":["useCallback","useEffect","useMemo","useRef","useState","OrderSide","OrderType","SDKError","useSymbolsInfo","Decimal","getPrecisionByNumber","useMutation","compose","head","omit","pick","baseInputHandle","getCalculateHandler","orderEntityFormatHandle","useCollateral","useMaxQty","useMarkPrice","order","orderUtils","useEventEmitter","useDebouncedCallback","OrderFactory","useOrderEntry","symbolOrOrder","sideOrOptions","reduceOnly","options","isNewVersion","symbol","side","order_type","prevOrderData","orderDataCache","notSupportData","errors","setErrors","ee","fieldDirty","submitted","askAndBid","onOrderbookUpdate","data","current","freeCollateral","totalCollateral","positions","accountInfo","symbolInfo","optionsValue","isReduceOnly","reduce_only","sideValue","baseDP","quoteDP","baseIMR","baseMMR","markPrice","diffOrderEntry","prev","key","value","preValue","keys","Object","i","length","k","preveValue","currentValue","maxQty","parseString2Number","dp","startsWith","replace","hasPoint","includes","endOfPoint","endsWith","decimalPart","split","slice","needParse","parsedData","order_quantity","toDecimalPlaces","toString","order_price","total","trigger_price","order_type_ext","visible_quantity","isAlgoOrder","STOP_LIMIT","STOP_MARKET","CLOSE_POSITION","doCreateOrder","isMutating","createOrder","values","orderCreator","create","Promise","reject","resolve","validate","then","message","res","success","onSubmit","submit","calculate","field","fieldHandler","newValues","validator","creator","formattedOrder","item","isStopOrder","isNil","err","catch","broker_id","watchOrderbook","on","off","getPriceAndQty","quantity","Number","orderPrice","isNaN","LIMIT","price","MARKET","BUY","SELL","estLiqPrice","result","orderFee","qty","futuresTakeFeeRate","liqPrice","IMR_Factor","newOrder","estLeverage","leverage","submitting","helper","metaState","dirty","symbolConfig"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
package/esm/version.d.ts CHANGED
@@ -5,6 +5,6 @@ declare global {
5
5
  };
6
6
  }
7
7
  }
8
- declare const _default: "1.5.15";
8
+ declare const _default: "1.5.16";
9
9
  export default _default;
10
10
  //# sourceMappingURL=version.d.ts.map
package/esm/version.js CHANGED
@@ -1,7 +1,7 @@
1
1
  if (typeof window !== 'undefined') {
2
2
  window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};
3
- window.__ORDERLY_VERSION__["@orderly.network/hooks"] = "1.5.15";
3
+ window.__ORDERLY_VERSION__["@orderly.network/hooks"] = "1.5.16";
4
4
  }
5
- export default "1.5.15";
5
+ export default "1.5.16";
6
6
 
7
7
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/version.ts"],"sourcesContent":["\ndeclare global {\n interface Window {\n __ORDERLY_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif(typeof window !== 'undefined') {\n window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};\n window.__ORDERLY_VERSION__[\"@orderly.network/hooks\"] = \"1.5.15\";\n};\n\nexport default \"1.5.15\";\n"],"names":["window","__ORDERLY_VERSION__"],"rangeMappings":";;;;","mappings":"AAQA,IAAG,OAAOA,WAAW,aAAa;IAC9BA,OAAOC,mBAAmB,GAAGD,OAAOC,mBAAmB,IAAI,CAAC;IAC5DD,OAAOC,mBAAmB,CAAC,yBAAyB,GAAG;AAC3D;AAEA,eAAe,SAAS"}
1
+ {"version":3,"sources":["../src/version.ts"],"sourcesContent":["\ndeclare global {\n interface Window {\n __ORDERLY_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif(typeof window !== 'undefined') {\n window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};\n window.__ORDERLY_VERSION__[\"@orderly.network/hooks\"] = \"1.5.16\";\n};\n\nexport default \"1.5.16\";\n"],"names":["window","__ORDERLY_VERSION__"],"rangeMappings":";;;;","mappings":"AAQA,IAAG,OAAOA,WAAW,aAAa;IAC9BA,OAAOC,mBAAmB,GAAGD,OAAOC,mBAAmB,IAAI,CAAC;IAC5DD,OAAOC,mBAAmB,CAAC,yBAAyB,GAAG;AAC3D;AAEA,eAAe,SAAS"}
@@ -265,7 +265,7 @@ function useOrderEntry(symbolOrOrder, sideOrOptions, reduceOnly, options) {
265
265
  ...data
266
266
  })).then((res)=>{
267
267
  // resolve(res);
268
- if (res.success) {
268
+ if (res && res.success) {
269
269
  // TODO: remove when the WS service is fixed
270
270
  // if (Array.isArray(res.data.rows)) {
271
271
  // ee.emit("algoOrder:cache", {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/orderly/useOrderEntry.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { \n API,\n OrderEntity,\n OrderSide,\n OrderType,\n SDKError,\n} from \"@orderly.network/types\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { Decimal, getPrecisionByNumber } from \"@orderly.network/utils\";\nimport { useMutation } from \"../useMutation\";\nimport { compose, head, includes, omit, pick } from \"ramda\";\nimport {\n baseInputHandle,\n getCalculateHandler,\n orderEntityFormatHandle,\n} from \"../utils/orderEntryHelper\";\nimport { useCollateral } from \"./useCollateral\";\nimport { useMaxQty } from \"./useMaxQty\";\n// import { availableOrderTypes } from \"../utils/createOrder\";\nimport { useMarkPrice } from \"./useMarkPrice\";\nimport { order as orderUtils } from \"@orderly.network/perp\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { useDebouncedCallback } from \"use-debounce\";\nimport { OrderFactory } from \"../services/orderCreator/factory\";\n// import { VerifyResult } from \"../utils/createOrder\";\n\nexport type UseOrderEntryOptions = {\n commify?: boolean;\n // Whether to observe the orderbook, if it is a limit order, the orderbook will automatically calculate the est. liq. price when it is updated.\n watchOrderbook?: boolean;\n validate?: (\n data: OrderEntity\n ) => { [P in keyof OrderEntity]?: string } | null | undefined;\n};\n\nexport type UseOrderEntryMetaState = {\n errors:\n | { [P in keyof OrderEntity]?: { type: string; message: string } }\n | null\n | undefined;\n dirty: { [P in keyof OrderEntity]?: boolean } | null | undefined;\n submitted: boolean;\n};\n\nexport type UseOrderEntryReturn = {\n // Maximum open position\n maxQty: number;\n freeCollateral: number;\n markPrice: number;\n estLiqPrice?: number | null;\n estLeverage?: number | null;\n //@Deprecated\n onSubmit: (order: OrderEntity) => Promise<any>;\n submit: () => Promise<OrderEntity>;\n // order: data,\n submitting: boolean;\n formattedOrder: Partial<OrderEntity>;\n helper: {\n calculate: (\n values: Partial<OrderEntity>,\n field: keyof OrderEntity,\n value: any\n ) => Partial<OrderEntity>;\n validator: (values: Partial<OrderEntity>) => any;\n // clearErrors: () => void;\n // setValues: (values: Partial<OrderEntity>) => void;\n };\n // formState: any;\n metaState: UseOrderEntryMetaState;\n symbolConfig: API.SymbolExt;\n};\n\nexport type OrderParams = Required<\n Pick<OrderEntity, \"side\" | \"order_type\" | \"symbol\">\n> &\n Partial<Omit<OrderEntity, \"side\" | \"symbol\" | \"order_type\">>;\n\n/**\n * Create Order\n * @example\n * ```tsx\n * import { useOrderEntry } from \"@orderly.network/hooks\";\n * import {OrderSide, OrderType} from '@orderly.network/types';\n *\n * const { formattedOrder, onSubmit, helper } = useOrderEntry({\n * symbol: \"PERP_ETH_USDC\",\n * side: OrderSide.BUY,\n * order_type: OrderType.LIMIT,\n * order_price: 10000,\n * order_quantity: 1,\n * },{\n * // **Note:** it's required\n * watchOrderbook: true,\n * });\n * ```\n */\nexport function useOrderEntry(\n order: OrderParams,\n options?: UseOrderEntryOptions\n): UseOrderEntryReturn;\n/**\n * @deprecated\n */\nexport function useOrderEntry(\n symbol: string,\n side: OrderSide,\n reduceOnly: boolean\n): UseOrderEntryReturn;\nexport function useOrderEntry(\n symbolOrOrder: string | OrderParams,\n sideOrOptions?: OrderSide | UseOrderEntryOptions,\n reduceOnly?: boolean,\n options?: UseOrderEntryOptions\n): UseOrderEntryReturn {\n // if symbolOrOrder is string, then it's deprecated\n let isNewVersion = false;\n if (typeof symbolOrOrder === \"object\") {\n isNewVersion = true;\n\n if (!symbolOrOrder.symbol) {\n throw new SDKError(\"symbol is required\");\n }\n\n if (!symbolOrOrder.side) {\n throw new SDKError(\"Order side is required\");\n }\n\n if (!symbolOrOrder.order_type) {\n throw new SDKError(\"order_type is required\");\n }\n }\n\n const prevOrderData = useRef<Partial<OrderEntity> | null>(null);\n // Cache data from the last calculate\n const orderDataCache = useRef<Partial<OrderEntity> | null>(null);\n //\n const notSupportData = useRef<Partial<OrderEntity>>({});\n\n const [errors, setErrors] = useState<any>(null);\n\n const ee = useEventEmitter();\n\n const fieldDirty = useRef<{ [K in keyof OrderEntity]?: boolean }>({});\n const submitted = useRef<boolean>(false);\n const askAndBid = useRef<number[]>([]); // 0: ask0, 1: bid0\n\n const onOrderbookUpdate = useDebouncedCallback((data: number[]) => {\n askAndBid.current = data;\n }, 200);\n\n const { freeCollateral, totalCollateral, positions, accountInfo } =\n useCollateral();\n\n const symbolInfo = useSymbolsInfo();\n // const tokenInfo = useTokenInfo();\n\n const symbol = useMemo(() => {\n if (typeof symbolOrOrder === \"string\") {\n return symbolOrOrder;\n }\n return symbolOrOrder.symbol!;\n }, [symbolOrOrder]);\n\n const optionsValue = useMemo(() => {\n if (typeof sideOrOptions === \"object\") {\n return sideOrOptions;\n }\n\n return options;\n }, [sideOrOptions]);\n\n const isReduceOnly = useMemo<boolean>(() => {\n if (typeof reduceOnly === \"boolean\") {\n return reduceOnly;\n }\n\n if (typeof symbolOrOrder === \"object\") {\n return !!symbolOrOrder.reduce_only;\n }\n\n return false;\n }, [symbolOrOrder, reduceOnly]);\n\n const sideValue = useMemo(() => {\n if (typeof symbolOrOrder === \"object\") {\n return symbolOrOrder.side;\n }\n\n // if (typeof sideOrOptions === \"string\") {\n return sideOrOptions as OrderSide;\n // }\n }, [symbolOrOrder, sideOrOptions]);\n\n const baseDP = useMemo(\n () => getPrecisionByNumber(symbolInfo[symbol](\"base_tick\", 0)),\n [symbolInfo]\n );\n const quoteDP = useMemo(() => {\n return getPrecisionByNumber(symbolInfo[symbol](\"quote_tick\", 0));\n }, [symbolInfo]);\n\n const baseIMR = useMemo(\n () => symbolInfo[symbol](\"base_imr\", 0),\n [symbolInfo]\n );\n const baseMMR = useMemo(\n () => symbolInfo[symbol](\"base_mmr\", 0),\n [symbolInfo]\n );\n\n const { data: markPrice } = useMarkPrice(symbol);\n // const markPrice = 1;\n\n const diffOrderEntry = (\n prev: Partial<OrderParams>,\n current: Partial<OrderParams>\n ): { key: keyof OrderParams; value: any; preValue: any } | null => {\n if (!prev) return null;\n let key, value, preValue;\n const keys = Object.keys(current) as (keyof OrderParams)[];\n\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n\n let preveValue = prev[k];\n let currentValue = current[k];\n\n if (\n typeof preveValue === \"undefined\" &&\n typeof currentValue === \"undefined\"\n )\n continue;\n\n // if (k === \"order_quantity\") {\n // preveValue = Number(preveValue);\n // currentValue = Number(currentValue);\n // }\n\n if (preveValue !== currentValue) {\n key = k;\n value = currentValue;\n preValue = preveValue;\n break;\n }\n }\n\n if (!key) return null;\n\n return { key, value, preValue };\n };\n\n const maxQty = useMaxQty(symbol, sideValue, isReduceOnly);\n\n const parseString2Number = (\n order: OrderParams & Record<string, any>,\n key: keyof OrderParams,\n dp?: number,\n ) => {\n if (typeof order[key] !== \"string\") return;\n // fix: delete the comma then remove the forward one of the string\n // first find the difference between current value and previous value\n\n if (order[key] && (order[key] as string).startsWith(\".\")) {\n (order[key] as string) = `0${order[key]}`;\n }\n\n // order[`${key}_origin`] = order[key];\n (order[key] as string) = (order[key] as string).replace(/,/g, \"\");\n\n // format input by decimal precision\n if (dp && (order[key] as string).length > 0) {\n const hasPoint = `${order[key]}`.includes(\".\");\n const endOfPoint = `${order[key]}`.endsWith(\".\");\n const decimalPart = `${order[key]}`.split(\".\");\n if (hasPoint && !endOfPoint) {\n (order[key] as string) = `${decimalPart[0]}.${decimalPart[1].slice(0,quoteDP)}`;\n }\n }\n };\n\n // just for performance optimization\n const needParse = useMemo(() => {\n if (typeof symbolOrOrder === \"string\") {\n return null;\n }\n return pick([\n \"order_price\",\n \"side\",\n \"order_quantity\",\n \"visible_quantity\",\n \"order_type\",\n \"order_type_ext\",\n \"symbol\",\n \"total\",\n \"reduce_only\",\n \"trigger_price\",\n ])(\n //@ts-ignore\n symbolOrOrder\n );\n }, [symbolOrOrder]);\n\n const parsedData = useMemo<OrderParams | null>(() => {\n if (typeof symbolOrOrder === \"string\") {\n return null;\n }\n // clean comma\n\n if (typeof symbolOrOrder.order_quantity === \"string\") {\n parseString2Number(symbolOrOrder, \"order_quantity\");\n } else if (typeof symbolOrOrder.order_quantity === \"number\") {\n symbolOrOrder.order_quantity = new Decimal(symbolOrOrder.order_quantity)\n .toDecimalPlaces(baseDP)\n .toString();\n }\n\n if (typeof symbolOrOrder.order_price === \"string\") {\n parseString2Number(symbolOrOrder, \"order_price\", quoteDP);\n }\n\n if (typeof symbolOrOrder.total === \"string\") {\n parseString2Number(symbolOrOrder, \"total\", quoteDP);\n }\n\n if (typeof symbolOrOrder.trigger_price === \"string\") {\n parseString2Number(symbolOrOrder, \"trigger_price\", quoteDP);\n }\n\n // if (typeof symbolOrOrder.trigger_price === \"string\") {\n // symbolOrOrder.trigger_price = symbolOrOrder.trigger_price.replace(\n // /,/g,\n // \"\"\n // );\n // }\n\n return symbolOrOrder;\n }, [\n needParse?.order_price,\n needParse?.order_quantity,\n needParse?.total,\n needParse?.trigger_price,\n needParse?.order_type,\n needParse?.order_type_ext,\n needParse?.symbol,\n needParse?.reduce_only,\n needParse?.side,\n needParse?.visible_quantity,\n quoteDP,\n baseDP,\n ]);\n\n const isAlgoOrder =\n parsedData?.order_type === OrderType.STOP_LIMIT ||\n parsedData?.order_type === OrderType.STOP_MARKET ||\n parsedData?.order_type === OrderType.CLOSE_POSITION;\n\n const [doCreateOrder, { isMutating }] = useMutation<OrderEntity, any>(\n isAlgoOrder ? \"/v1/algo/order\" : \"/v1/order\"\n );\n\n // const maxQty = 3;\n\n const createOrder = (values: Partial<OrderEntity>): Promise<OrderEntity> => {\n if (!values.symbol) {\n throw new SDKError(\"symbol is error\");\n }\n\n if (!values.side) {\n throw new SDKError(\"side is error\");\n }\n\n if (!values || typeof values.order_type === \"undefined\") {\n throw new SDKError(\"order_type is error\");\n }\n\n const orderCreator = OrderFactory.create(\n // @ts-ignore\n values.order_type_ext ? values.order_type_ext : values.order_type\n );\n\n if (!orderCreator) {\n return Promise.reject(new SDKError(\"orderCreator is null\"));\n }\n\n \n\n return new Promise((resolve, reject) => {\n return orderCreator\n .validate(values, {\n symbol: symbolInfo[symbol](),\n // token: tokenInfo[symbol](),\n maxQty,\n markPrice: markPrice,\n })\n .then((errors: any) => {\n submitted.current = true;\n\n if (\n errors.order_price ||\n errors.order_quantity ||\n errors.trigger_price ||\n errors.total\n ) {\n setErrors(errors);\n reject(\n errors.order_price?.message || errors.order_quantity?.message\n );\n // throw new SDKError(\n // errors.order_price?.message ||\n // errors.order_quantity?.message ||\n // \"order validation error\"\n // );\n } else {\n const data = orderCreator.create(values as OrderEntity, {\n symbol: symbolInfo[symbol](),\n maxQty,\n markPrice: markPrice,\n });\n\n // console.log(\"------------------\", values, data);\n\n return doCreateOrder(\n omit([\"order_type_ext\"], {\n // ...values,\n // ...omit([\"order_price\"], values),\n ...data,\n })\n ).then((res) => {\n // resolve(res);\n if (res.success) {\n // TODO: remove when the WS service is fixed\n\n // if (Array.isArray(res.data.rows)) {\n // ee.emit(\"algoOrder:cache\", {\n // ...res.data.rows[0],\n // trigger_price: data.trigger_price,\n // });\n // }\n\n resolve(res.data);\n } else {\n reject(res);\n }\n }, reject);\n }\n });\n });\n };\n\n /**\n * submit form,validate values\n * @param values\n * @returns\n */\n const onSubmit = (values: OrderEntity) => {\n if (typeof reduceOnly === \"boolean\" && reduceOnly && !values.reduce_only) {\n return Promise.reject(\n new SDKError(\n \"The reduceOny parameter of hook does not match your order data\"\n )\n );\n }\n return createOrder({\n ...values,\n symbol,\n });\n };\n\n const submit = useCallback(() => {\n if (!parsedData) {\n throw new SDKError(\"Function is not supported, please use onSubmit()\");\n }\n return createOrder(parsedData);\n }, [parsedData]);\n\n const calculate = useCallback(\n (\n values: Partial<OrderEntity>,\n field: keyof OrderEntity,\n value: any\n ): Partial<OrderEntity> => {\n const fieldHandler = getCalculateHandler(field);\n const newValues = compose(\n head,\n orderEntityFormatHandle(baseDP, quoteDP),\n fieldHandler,\n baseInputHandle\n )([values, field, value, markPrice, { baseDP, quoteDP }]);\n\n return newValues as Partial<OrderEntity>;\n },\n [markPrice]\n );\n\n // const estLiqPrice = useMemo(() => {}, []);\n\n const validator = (values: any) => {\n // @ts-ignore\n const creator = OrderFactory.create(values.order_type);\n\n return creator?.validate(values, {\n symbol: symbolInfo[symbol](),\n // token: tokenInfo[symbol](),\n maxQty,\n markPrice: markPrice,\n });\n };\n\n const formattedOrder = useMemo<Partial<OrderEntity>>(() => {\n if (!parsedData) {\n return notSupportData.current;\n }\n // prevOrderData.current = symbolOrOrder;\n\n if (!prevOrderData.current) {\n // prevOrderData.current = {\n // ...symbolOrOrder,\n // total: \"\",\n // };\n\n prevOrderData.current = parsedData;\n orderDataCache.current = {\n ...parsedData,\n total: \"\",\n };\n\n return orderDataCache.current as Partial<OrderEntity>;\n }\n\n // diff order entry\n const item = diffOrderEntry(prevOrderData.current, parsedData);\n\n // console.log(prevOrderData.current, symbolOrOrder, item);\n // console.log(item);\n\n if (!item) {\n return orderDataCache.current as Partial<OrderEntity>;\n }\n\n // set field dirty\n if (typeof parsedData.order_price !== \"undefined\") {\n fieldDirty.current.order_price = true;\n }\n if (typeof parsedData.order_quantity !== \"undefined\") {\n fieldDirty.current.order_quantity = true;\n }\n\n const values = calculate(parsedData, item.key, item.value);\n\n values.isStopOrder = values.order_type?.startsWith(\"STOP\") || false;\n\n values.total = values.total || \"\";\n\n prevOrderData.current = parsedData;\n orderDataCache.current = values;\n\n return values;\n }, [parsedData, markPrice]);\n\n /// validator order info\n useEffect(() => {\n if (!markPrice || symbolInfo.isNil) return;\n // validate order data;\n validator(formattedOrder)\n ?.then((err) => {\n setErrors(err);\n })\n .catch((err) => {});\n }, [\n formattedOrder.broker_id,\n formattedOrder.order_quantity,\n formattedOrder.total,\n formattedOrder.trigger_price,\n formattedOrder.order_type,\n markPrice,\n ]);\n\n //====== update orderbook ask0/bid0 ======\n useEffect(() => {\n if (isNewVersion) {\n if (!optionsValue?.watchOrderbook) {\n throw new SDKError(\n \"In order to calculate the estimated liquidation price, the `options.watchOrderbook` parameter must be set to true.\"\n );\n }\n } else {\n if (!optionsValue?.watchOrderbook) {\n return;\n }\n }\n\n ee.on(\"orderbook:update\", onOrderbookUpdate);\n\n return () => {\n ee.off(\"orderbook:update\", onOrderbookUpdate);\n };\n }, [optionsValue?.watchOrderbook]);\n\n useEffect(() => {\n askAndBid.current = [];\n }, [parsedData?.symbol]);\n\n //====== end ======\n\n const getPriceAndQty = (\n symbolOrOrder: OrderEntity\n ): { quantity: number; price: number } | null => {\n let quantity = Number(symbolOrOrder.order_quantity);\n const orderPrice = Number(symbolOrOrder.order_price);\n\n if (isNaN(quantity) || quantity <= 0) {\n return null;\n }\n\n if (!!options?.watchOrderbook && askAndBid.current.length === 0) {\n throw new SDKError(\n \"Please check if you are using the `useOrderbookStream` hook or if the orderBook has data.\"\n );\n }\n\n if (\n (symbolOrOrder.order_type === OrderType.LIMIT ||\n symbolOrOrder.order_type === OrderType.STOP_LIMIT) &&\n isNaN(orderPrice)\n )\n return null;\n\n /**\n * price\n * if order_type = market order,\n order side = long, then order_price_i = ask0\n order side = short, then order_price_i = bid0\n if order_type = limit order\n order side = long\n limit_price >= ask0, then order_price_i = ask0\n limit_price < ask0, then order_price_i = limit_price\n order side = short\n limit_price <= bid0, then order_price_i = bid0\n limit_price > ask0, then order_price_i = ask0\n */\n let price: number | undefined;\n\n if (\n symbolOrOrder.order_type === OrderType.MARKET ||\n symbolOrOrder.order_type === OrderType.STOP_MARKET\n ) {\n if (symbolOrOrder.side === OrderSide.BUY) {\n price = askAndBid.current[0];\n } else {\n price = askAndBid.current[1];\n }\n } else {\n // LIMIT order\n if (symbolOrOrder.side === OrderSide.BUY) {\n if (orderPrice >= askAndBid.current[0]) {\n price = askAndBid.current[0];\n } else {\n price = orderPrice;\n }\n } else {\n if (orderPrice <= askAndBid.current[1]) {\n price = askAndBid.current[1];\n } else {\n price = orderPrice;\n }\n }\n }\n\n if (symbolOrOrder.side === OrderSide.SELL) {\n quantity = -quantity;\n }\n\n return { price, quantity };\n };\n\n const estLiqPrice = useMemo(() => {\n if (!accountInfo || !parsedData || !markPrice) return null;\n\n const result = getPriceAndQty(formattedOrder as OrderEntity);\n if (result === null) return null;\n const { price, quantity } = result;\n if (!price || !quantity) return null;\n\n const orderFee = orderUtils.orderFee({\n qty: quantity,\n price,\n futuresTakeFeeRate: Number(accountInfo[\"futures_taker_fee_rate\"]) / 10000,\n });\n\n const liqPrice = orderUtils.estLiqPrice({\n markPrice,\n baseIMR,\n baseMMR,\n totalCollateral,\n positions,\n IMR_Factor: accountInfo[\"imr_factor\"][symbol],\n orderFee,\n newOrder: {\n qty: quantity,\n price,\n symbol: parsedData.symbol!,\n },\n });\n\n // console.log(\"********\", liqPrice, markPrice, totalCollateral, result);\n\n if (liqPrice <= 0) return null;\n\n return liqPrice;\n }, [\n markPrice,\n baseIMR,\n baseMMR,\n totalCollateral,\n formattedOrder?.order_price,\n formattedOrder?.order_quantity,\n formattedOrder?.total,\n formattedOrder?.trigger_price,\n accountInfo,\n ]);\n\n const estLeverage = useMemo(() => {\n if (!accountInfo || !parsedData) return null;\n const result = getPriceAndQty(formattedOrder as OrderEntity);\n if (result === null || !result.price || !result.quantity) return null;\n\n const leverage = orderUtils.estLeverage({\n totalCollateral,\n positions,\n newOrder: {\n symbol: parsedData.symbol,\n qty: result.quantity,\n price: result.price,\n },\n });\n\n return leverage;\n }, [\n baseIMR,\n baseMMR,\n totalCollateral,\n positions,\n formattedOrder?.order_price,\n formattedOrder?.order_quantity,\n formattedOrder?.total,\n formattedOrder?.trigger_price,\n ]);\n\n return {\n maxQty,\n freeCollateral,\n markPrice,\n onSubmit,\n submit,\n submitting: isMutating,\n formattedOrder,\n // errors,\n estLiqPrice,\n estLeverage,\n helper: {\n calculate,\n validator,\n // clearErrors,\n },\n metaState: {\n dirty: fieldDirty.current,\n submitted: submitted.current,\n errors,\n },\n symbolConfig: symbolInfo[symbol](),\n };\n}\n"],"names":["useOrderEntry","symbolOrOrder","sideOrOptions","reduceOnly","options","isNewVersion","symbol","SDKError","side","order_type","prevOrderData","useRef","orderDataCache","notSupportData","errors","setErrors","useState","ee","useEventEmitter","fieldDirty","submitted","askAndBid","onOrderbookUpdate","useDebouncedCallback","data","current","freeCollateral","totalCollateral","positions","accountInfo","useCollateral","symbolInfo","useSymbolsInfo","useMemo","optionsValue","isReduceOnly","reduce_only","sideValue","baseDP","getPrecisionByNumber","quoteDP","baseIMR","baseMMR","markPrice","useMarkPrice","diffOrderEntry","prev","key","value","preValue","keys","Object","i","length","k","preveValue","currentValue","maxQty","useMaxQty","parseString2Number","order","dp","startsWith","replace","hasPoint","includes","endOfPoint","endsWith","decimalPart","split","slice","needParse","pick","parsedData","order_quantity","Decimal","toDecimalPlaces","toString","order_price","total","trigger_price","order_type_ext","visible_quantity","isAlgoOrder","OrderType","STOP_LIMIT","STOP_MARKET","CLOSE_POSITION","doCreateOrder","isMutating","useMutation","createOrder","values","orderCreator","OrderFactory","create","Promise","reject","resolve","validate","then","message","omit","res","success","onSubmit","submit","useCallback","calculate","field","fieldHandler","getCalculateHandler","newValues","compose","head","orderEntityFormatHandle","baseInputHandle","validator","creator","formattedOrder","item","isStopOrder","useEffect","isNil","err","catch","broker_id","watchOrderbook","on","off","getPriceAndQty","quantity","Number","orderPrice","isNaN","LIMIT","price","MARKET","OrderSide","BUY","SELL","estLiqPrice","result","orderFee","orderUtils","qty","futuresTakeFeeRate","liqPrice","IMR_Factor","newOrder","estLeverage","leverage","submitting","helper","metaState","dirty","symbolConfig"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../src/orderly/useOrderEntry.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n API,\n OrderEntity,\n OrderSide,\n OrderType,\n SDKError,\n} from \"@orderly.network/types\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { Decimal, getPrecisionByNumber } from \"@orderly.network/utils\";\nimport { useMutation } from \"../useMutation\";\nimport { compose, head, includes, omit, pick } from \"ramda\";\nimport {\n baseInputHandle,\n getCalculateHandler,\n orderEntityFormatHandle,\n} from \"../utils/orderEntryHelper\";\nimport { useCollateral } from \"./useCollateral\";\nimport { useMaxQty } from \"./useMaxQty\";\n// import { availableOrderTypes } from \"../utils/createOrder\";\nimport { useMarkPrice } from \"./useMarkPrice\";\nimport { order as orderUtils } from \"@orderly.network/perp\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { useDebouncedCallback } from \"use-debounce\";\nimport { OrderFactory } from \"../services/orderCreator/factory\";\n// import { VerifyResult } from \"../utils/createOrder\";\n\nexport type UseOrderEntryOptions = {\n commify?: boolean;\n // Whether to observe the orderbook, if it is a limit order, the orderbook will automatically calculate the est. liq. price when it is updated.\n watchOrderbook?: boolean;\n validate?: (\n data: OrderEntity\n ) => { [P in keyof OrderEntity]?: string } | null | undefined;\n};\n\nexport type UseOrderEntryMetaState = {\n errors:\n | { [P in keyof OrderEntity]?: { type: string; message: string } }\n | null\n | undefined;\n dirty: { [P in keyof OrderEntity]?: boolean } | null | undefined;\n submitted: boolean;\n};\n\nexport type UseOrderEntryReturn = {\n // Maximum open position\n maxQty: number;\n freeCollateral: number;\n markPrice: number;\n estLiqPrice?: number | null;\n estLeverage?: number | null;\n //@Deprecated\n onSubmit: (order: OrderEntity) => Promise<any>;\n submit: () => Promise<OrderEntity>;\n // order: data,\n submitting: boolean;\n formattedOrder: Partial<OrderEntity>;\n helper: {\n calculate: (\n values: Partial<OrderEntity>,\n field: keyof OrderEntity,\n value: any\n ) => Partial<OrderEntity>;\n validator: (values: Partial<OrderEntity>) => any;\n // clearErrors: () => void;\n // setValues: (values: Partial<OrderEntity>) => void;\n };\n // formState: any;\n metaState: UseOrderEntryMetaState;\n symbolConfig: API.SymbolExt;\n};\n\nexport type OrderParams = Required<\n Pick<OrderEntity, \"side\" | \"order_type\" | \"symbol\">\n> &\n Partial<Omit<OrderEntity, \"side\" | \"symbol\" | \"order_type\">>;\n\n/**\n * Create Order\n * @example\n * ```tsx\n * import { useOrderEntry } from \"@orderly.network/hooks\";\n * import {OrderSide, OrderType} from '@orderly.network/types';\n *\n * const { formattedOrder, onSubmit, helper } = useOrderEntry({\n * symbol: \"PERP_ETH_USDC\",\n * side: OrderSide.BUY,\n * order_type: OrderType.LIMIT,\n * order_price: 10000,\n * order_quantity: 1,\n * },{\n * // **Note:** it's required\n * watchOrderbook: true,\n * });\n * ```\n */\nexport function useOrderEntry(\n order: OrderParams,\n options?: UseOrderEntryOptions\n): UseOrderEntryReturn;\n/**\n * @deprecated\n */\nexport function useOrderEntry(\n symbol: string,\n side: OrderSide,\n reduceOnly: boolean\n): UseOrderEntryReturn;\nexport function useOrderEntry(\n symbolOrOrder: string | OrderParams,\n sideOrOptions?: OrderSide | UseOrderEntryOptions,\n reduceOnly?: boolean,\n options?: UseOrderEntryOptions\n): UseOrderEntryReturn {\n // if symbolOrOrder is string, then it's deprecated\n let isNewVersion = false;\n if (typeof symbolOrOrder === \"object\") {\n isNewVersion = true;\n\n if (!symbolOrOrder.symbol) {\n throw new SDKError(\"symbol is required\");\n }\n\n if (!symbolOrOrder.side) {\n throw new SDKError(\"Order side is required\");\n }\n\n if (!symbolOrOrder.order_type) {\n throw new SDKError(\"order_type is required\");\n }\n }\n\n const prevOrderData = useRef<Partial<OrderEntity> | null>(null);\n // Cache data from the last calculate\n const orderDataCache = useRef<Partial<OrderEntity> | null>(null);\n //\n const notSupportData = useRef<Partial<OrderEntity>>({});\n\n const [errors, setErrors] = useState<any>(null);\n\n const ee = useEventEmitter();\n\n const fieldDirty = useRef<{ [K in keyof OrderEntity]?: boolean }>({});\n const submitted = useRef<boolean>(false);\n const askAndBid = useRef<number[]>([]); // 0: ask0, 1: bid0\n\n const onOrderbookUpdate = useDebouncedCallback((data: number[]) => {\n askAndBid.current = data;\n }, 200);\n\n const { freeCollateral, totalCollateral, positions, accountInfo } =\n useCollateral();\n\n const symbolInfo = useSymbolsInfo();\n // const tokenInfo = useTokenInfo();\n\n const symbol = useMemo(() => {\n if (typeof symbolOrOrder === \"string\") {\n return symbolOrOrder;\n }\n return symbolOrOrder.symbol!;\n }, [symbolOrOrder]);\n\n const optionsValue = useMemo(() => {\n if (typeof sideOrOptions === \"object\") {\n return sideOrOptions;\n }\n\n return options;\n }, [sideOrOptions]);\n\n const isReduceOnly = useMemo<boolean>(() => {\n if (typeof reduceOnly === \"boolean\") {\n return reduceOnly;\n }\n\n if (typeof symbolOrOrder === \"object\") {\n return !!symbolOrOrder.reduce_only;\n }\n\n return false;\n }, [symbolOrOrder, reduceOnly]);\n\n const sideValue = useMemo(() => {\n if (typeof symbolOrOrder === \"object\") {\n return symbolOrOrder.side;\n }\n\n // if (typeof sideOrOptions === \"string\") {\n return sideOrOptions as OrderSide;\n // }\n }, [symbolOrOrder, sideOrOptions]);\n\n const baseDP = useMemo(\n () => getPrecisionByNumber(symbolInfo[symbol](\"base_tick\", 0)),\n [symbolInfo]\n );\n const quoteDP = useMemo(() => {\n return getPrecisionByNumber(symbolInfo[symbol](\"quote_tick\", 0));\n }, [symbolInfo]);\n\n const baseIMR = useMemo(\n () => symbolInfo[symbol](\"base_imr\", 0),\n [symbolInfo]\n );\n const baseMMR = useMemo(\n () => symbolInfo[symbol](\"base_mmr\", 0),\n [symbolInfo]\n );\n\n const { data: markPrice } = useMarkPrice(symbol);\n // const markPrice = 1;\n\n const diffOrderEntry = (\n prev: Partial<OrderParams>,\n current: Partial<OrderParams>\n ): { key: keyof OrderParams; value: any; preValue: any } | null => {\n if (!prev) return null;\n let key, value, preValue;\n const keys = Object.keys(current) as (keyof OrderParams)[];\n\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n\n let preveValue = prev[k];\n let currentValue = current[k];\n\n if (\n typeof preveValue === \"undefined\" &&\n typeof currentValue === \"undefined\"\n )\n continue;\n\n // if (k === \"order_quantity\") {\n // preveValue = Number(preveValue);\n // currentValue = Number(currentValue);\n // }\n\n if (preveValue !== currentValue) {\n key = k;\n value = currentValue;\n preValue = preveValue;\n break;\n }\n }\n\n if (!key) return null;\n\n return { key, value, preValue };\n };\n\n const maxQty = useMaxQty(symbol, sideValue, isReduceOnly);\n\n const parseString2Number = (\n order: OrderParams & Record<string, any>,\n key: keyof OrderParams,\n dp?: number\n ) => {\n if (typeof order[key] !== \"string\") return;\n // fix: delete the comma then remove the forward one of the string\n // first find the difference between current value and previous value\n\n if (order[key] && (order[key] as string).startsWith(\".\")) {\n (order[key] as string) = `0${order[key]}`;\n }\n\n // order[`${key}_origin`] = order[key];\n (order[key] as string) = (order[key] as string).replace(/,/g, \"\");\n\n // format input by decimal precision\n if (dp && (order[key] as string).length > 0) {\n const hasPoint = `${order[key]}`.includes(\".\");\n const endOfPoint = `${order[key]}`.endsWith(\".\");\n const decimalPart = `${order[key]}`.split(\".\");\n if (hasPoint && !endOfPoint) {\n (order[key] as string) = `${decimalPart[0]}.${decimalPart[1].slice(\n 0,\n quoteDP\n )}`;\n }\n }\n };\n\n // just for performance optimization\n const needParse = useMemo(() => {\n if (typeof symbolOrOrder === \"string\") {\n return null;\n }\n return pick([\n \"order_price\",\n \"side\",\n \"order_quantity\",\n \"visible_quantity\",\n \"order_type\",\n \"order_type_ext\",\n \"symbol\",\n \"total\",\n \"reduce_only\",\n \"trigger_price\",\n ])(\n //@ts-ignore\n symbolOrOrder\n );\n }, [symbolOrOrder]);\n\n const parsedData = useMemo<OrderParams | null>(() => {\n if (typeof symbolOrOrder === \"string\") {\n return null;\n }\n // clean comma\n\n if (typeof symbolOrOrder.order_quantity === \"string\") {\n parseString2Number(symbolOrOrder, \"order_quantity\");\n } else if (typeof symbolOrOrder.order_quantity === \"number\") {\n symbolOrOrder.order_quantity = new Decimal(symbolOrOrder.order_quantity)\n .toDecimalPlaces(baseDP)\n .toString();\n }\n\n if (typeof symbolOrOrder.order_price === \"string\") {\n parseString2Number(symbolOrOrder, \"order_price\", quoteDP);\n }\n\n if (typeof symbolOrOrder.total === \"string\") {\n parseString2Number(symbolOrOrder, \"total\", quoteDP);\n }\n\n if (typeof symbolOrOrder.trigger_price === \"string\") {\n parseString2Number(symbolOrOrder, \"trigger_price\", quoteDP);\n }\n\n // if (typeof symbolOrOrder.trigger_price === \"string\") {\n // symbolOrOrder.trigger_price = symbolOrOrder.trigger_price.replace(\n // /,/g,\n // \"\"\n // );\n // }\n\n return symbolOrOrder;\n }, [\n needParse?.order_price,\n needParse?.order_quantity,\n needParse?.total,\n needParse?.trigger_price,\n needParse?.order_type,\n needParse?.order_type_ext,\n needParse?.symbol,\n needParse?.reduce_only,\n needParse?.side,\n needParse?.visible_quantity,\n quoteDP,\n baseDP,\n ]);\n\n const isAlgoOrder =\n parsedData?.order_type === OrderType.STOP_LIMIT ||\n parsedData?.order_type === OrderType.STOP_MARKET ||\n parsedData?.order_type === OrderType.CLOSE_POSITION;\n\n const [doCreateOrder, { isMutating }] = useMutation<OrderEntity, any>(\n isAlgoOrder ? \"/v1/algo/order\" : \"/v1/order\"\n );\n\n // const maxQty = 3;\n\n const createOrder = (values: Partial<OrderEntity>): Promise<OrderEntity> => {\n if (!values.symbol) {\n throw new SDKError(\"symbol is error\");\n }\n\n if (!values.side) {\n throw new SDKError(\"side is error\");\n }\n\n if (!values || typeof values.order_type === \"undefined\") {\n throw new SDKError(\"order_type is error\");\n }\n\n const orderCreator = OrderFactory.create(\n // @ts-ignore\n values.order_type_ext ? values.order_type_ext : values.order_type\n );\n\n if (!orderCreator) {\n return Promise.reject(new SDKError(\"orderCreator is null\"));\n }\n\n return new Promise((resolve, reject) => {\n return orderCreator\n .validate(values, {\n symbol: symbolInfo[symbol](),\n // token: tokenInfo[symbol](),\n maxQty,\n markPrice: markPrice,\n })\n .then((errors: any) => {\n submitted.current = true;\n\n if (\n errors.order_price ||\n errors.order_quantity ||\n errors.trigger_price ||\n errors.total\n ) {\n setErrors(errors);\n reject(\n errors.order_price?.message || errors.order_quantity?.message\n );\n // throw new SDKError(\n // errors.order_price?.message ||\n // errors.order_quantity?.message ||\n // \"order validation error\"\n // );\n } else {\n const data = orderCreator.create(values as OrderEntity, {\n symbol: symbolInfo[symbol](),\n maxQty,\n markPrice: markPrice,\n });\n\n // console.log(\"------------------\", values, data);\n\n return doCreateOrder(\n omit([\"order_type_ext\"], {\n // ...values,\n // ...omit([\"order_price\"], values),\n ...data,\n })\n ).then((res) => {\n // resolve(res);\n if (res && res.success) {\n // TODO: remove when the WS service is fixed\n\n // if (Array.isArray(res.data.rows)) {\n // ee.emit(\"algoOrder:cache\", {\n // ...res.data.rows[0],\n // trigger_price: data.trigger_price,\n // });\n // }\n\n resolve(res.data);\n } else {\n reject(res);\n }\n }, reject);\n }\n });\n });\n };\n\n /**\n * submit form,validate values\n * @param values\n * @returns\n */\n const onSubmit = (values: OrderEntity) => {\n if (typeof reduceOnly === \"boolean\" && reduceOnly && !values.reduce_only) {\n return Promise.reject(\n new SDKError(\n \"The reduceOny parameter of hook does not match your order data\"\n )\n );\n }\n return createOrder({\n ...values,\n symbol,\n });\n };\n\n const submit = useCallback(() => {\n if (!parsedData) {\n throw new SDKError(\"Function is not supported, please use onSubmit()\");\n }\n return createOrder(parsedData);\n }, [parsedData]);\n\n const calculate = useCallback(\n (\n values: Partial<OrderEntity>,\n field: keyof OrderEntity,\n value: any\n ): Partial<OrderEntity> => {\n const fieldHandler = getCalculateHandler(field);\n const newValues = compose(\n head,\n orderEntityFormatHandle(baseDP, quoteDP),\n fieldHandler,\n baseInputHandle\n )([values, field, value, markPrice, { baseDP, quoteDP }]);\n\n return newValues as Partial<OrderEntity>;\n },\n [markPrice]\n );\n\n // const estLiqPrice = useMemo(() => {}, []);\n\n const validator = (values: any) => {\n // @ts-ignore\n const creator = OrderFactory.create(values.order_type);\n\n return creator?.validate(values, {\n symbol: symbolInfo[symbol](),\n // token: tokenInfo[symbol](),\n maxQty,\n markPrice: markPrice,\n });\n };\n\n const formattedOrder = useMemo<Partial<OrderEntity>>(() => {\n if (!parsedData) {\n return notSupportData.current;\n }\n // prevOrderData.current = symbolOrOrder;\n\n if (!prevOrderData.current) {\n // prevOrderData.current = {\n // ...symbolOrOrder,\n // total: \"\",\n // };\n\n prevOrderData.current = parsedData;\n orderDataCache.current = {\n ...parsedData,\n total: \"\",\n };\n\n return orderDataCache.current as Partial<OrderEntity>;\n }\n\n // diff order entry\n const item = diffOrderEntry(prevOrderData.current, parsedData);\n\n // console.log(prevOrderData.current, symbolOrOrder, item);\n // console.log(item);\n\n if (!item) {\n return orderDataCache.current as Partial<OrderEntity>;\n }\n\n // set field dirty\n if (typeof parsedData.order_price !== \"undefined\") {\n fieldDirty.current.order_price = true;\n }\n if (typeof parsedData.order_quantity !== \"undefined\") {\n fieldDirty.current.order_quantity = true;\n }\n\n const values = calculate(parsedData, item.key, item.value);\n\n values.isStopOrder = values.order_type?.startsWith(\"STOP\") || false;\n\n values.total = values.total || \"\";\n\n prevOrderData.current = parsedData;\n orderDataCache.current = values;\n\n return values;\n }, [parsedData, markPrice]);\n\n /// validator order info\n useEffect(() => {\n if (!markPrice || symbolInfo.isNil) return;\n // validate order data;\n validator(formattedOrder)\n ?.then((err) => {\n setErrors(err);\n })\n .catch((err) => {});\n }, [\n formattedOrder.broker_id,\n formattedOrder.order_quantity,\n formattedOrder.total,\n formattedOrder.trigger_price,\n formattedOrder.order_type,\n markPrice,\n ]);\n\n //====== update orderbook ask0/bid0 ======\n useEffect(() => {\n if (isNewVersion) {\n if (!optionsValue?.watchOrderbook) {\n throw new SDKError(\n \"In order to calculate the estimated liquidation price, the `options.watchOrderbook` parameter must be set to true.\"\n );\n }\n } else {\n if (!optionsValue?.watchOrderbook) {\n return;\n }\n }\n\n ee.on(\"orderbook:update\", onOrderbookUpdate);\n\n return () => {\n ee.off(\"orderbook:update\", onOrderbookUpdate);\n };\n }, [optionsValue?.watchOrderbook]);\n\n useEffect(() => {\n askAndBid.current = [];\n }, [parsedData?.symbol]);\n\n //====== end ======\n\n const getPriceAndQty = (\n symbolOrOrder: OrderEntity\n ): { quantity: number; price: number } | null => {\n let quantity = Number(symbolOrOrder.order_quantity);\n const orderPrice = Number(symbolOrOrder.order_price);\n\n if (isNaN(quantity) || quantity <= 0) {\n return null;\n }\n\n if (!!options?.watchOrderbook && askAndBid.current.length === 0) {\n throw new SDKError(\n \"Please check if you are using the `useOrderbookStream` hook or if the orderBook has data.\"\n );\n }\n\n if (\n (symbolOrOrder.order_type === OrderType.LIMIT ||\n symbolOrOrder.order_type === OrderType.STOP_LIMIT) &&\n isNaN(orderPrice)\n )\n return null;\n\n /**\n * price\n * if order_type = market order,\n order side = long, then order_price_i = ask0\n order side = short, then order_price_i = bid0\n if order_type = limit order\n order side = long\n limit_price >= ask0, then order_price_i = ask0\n limit_price < ask0, then order_price_i = limit_price\n order side = short\n limit_price <= bid0, then order_price_i = bid0\n limit_price > ask0, then order_price_i = ask0\n */\n let price: number | undefined;\n\n if (\n symbolOrOrder.order_type === OrderType.MARKET ||\n symbolOrOrder.order_type === OrderType.STOP_MARKET\n ) {\n if (symbolOrOrder.side === OrderSide.BUY) {\n price = askAndBid.current[0];\n } else {\n price = askAndBid.current[1];\n }\n } else {\n // LIMIT order\n if (symbolOrOrder.side === OrderSide.BUY) {\n if (orderPrice >= askAndBid.current[0]) {\n price = askAndBid.current[0];\n } else {\n price = orderPrice;\n }\n } else {\n if (orderPrice <= askAndBid.current[1]) {\n price = askAndBid.current[1];\n } else {\n price = orderPrice;\n }\n }\n }\n\n if (symbolOrOrder.side === OrderSide.SELL) {\n quantity = -quantity;\n }\n\n return { price, quantity };\n };\n\n const estLiqPrice = useMemo(() => {\n if (!accountInfo || !parsedData || !markPrice) return null;\n\n const result = getPriceAndQty(formattedOrder as OrderEntity);\n if (result === null) return null;\n const { price, quantity } = result;\n if (!price || !quantity) return null;\n\n const orderFee = orderUtils.orderFee({\n qty: quantity,\n price,\n futuresTakeFeeRate: Number(accountInfo[\"futures_taker_fee_rate\"]) / 10000,\n });\n\n const liqPrice = orderUtils.estLiqPrice({\n markPrice,\n baseIMR,\n baseMMR,\n totalCollateral,\n positions,\n IMR_Factor: accountInfo[\"imr_factor\"][symbol],\n orderFee,\n newOrder: {\n qty: quantity,\n price,\n symbol: parsedData.symbol!,\n },\n });\n\n // console.log(\"********\", liqPrice, markPrice, totalCollateral, result);\n\n if (liqPrice <= 0) return null;\n\n return liqPrice;\n }, [\n markPrice,\n baseIMR,\n baseMMR,\n totalCollateral,\n formattedOrder?.order_price,\n formattedOrder?.order_quantity,\n formattedOrder?.total,\n formattedOrder?.trigger_price,\n accountInfo,\n ]);\n\n const estLeverage = useMemo(() => {\n if (!accountInfo || !parsedData) return null;\n const result = getPriceAndQty(formattedOrder as OrderEntity);\n if (result === null || !result.price || !result.quantity) return null;\n\n const leverage = orderUtils.estLeverage({\n totalCollateral,\n positions,\n newOrder: {\n symbol: parsedData.symbol,\n qty: result.quantity,\n price: result.price,\n },\n });\n\n return leverage;\n }, [\n baseIMR,\n baseMMR,\n totalCollateral,\n positions,\n formattedOrder?.order_price,\n formattedOrder?.order_quantity,\n formattedOrder?.total,\n formattedOrder?.trigger_price,\n ]);\n\n return {\n maxQty,\n freeCollateral,\n markPrice,\n onSubmit,\n submit,\n submitting: isMutating,\n formattedOrder,\n // errors,\n estLiqPrice,\n estLeverage,\n helper: {\n calculate,\n validator,\n // clearErrors,\n },\n metaState: {\n dirty: fieldDirty.current,\n submitted: submitted.current,\n errors,\n },\n symbolConfig: symbolInfo[symbol](),\n };\n}\n"],"names":["useOrderEntry","symbolOrOrder","sideOrOptions","reduceOnly","options","isNewVersion","symbol","SDKError","side","order_type","prevOrderData","useRef","orderDataCache","notSupportData","errors","setErrors","useState","ee","useEventEmitter","fieldDirty","submitted","askAndBid","onOrderbookUpdate","useDebouncedCallback","data","current","freeCollateral","totalCollateral","positions","accountInfo","useCollateral","symbolInfo","useSymbolsInfo","useMemo","optionsValue","isReduceOnly","reduce_only","sideValue","baseDP","getPrecisionByNumber","quoteDP","baseIMR","baseMMR","markPrice","useMarkPrice","diffOrderEntry","prev","key","value","preValue","keys","Object","i","length","k","preveValue","currentValue","maxQty","useMaxQty","parseString2Number","order","dp","startsWith","replace","hasPoint","includes","endOfPoint","endsWith","decimalPart","split","slice","needParse","pick","parsedData","order_quantity","Decimal","toDecimalPlaces","toString","order_price","total","trigger_price","order_type_ext","visible_quantity","isAlgoOrder","OrderType","STOP_LIMIT","STOP_MARKET","CLOSE_POSITION","doCreateOrder","isMutating","useMutation","createOrder","values","orderCreator","OrderFactory","create","Promise","reject","resolve","validate","then","message","omit","res","success","onSubmit","submit","useCallback","calculate","field","fieldHandler","getCalculateHandler","newValues","compose","head","orderEntityFormatHandle","baseInputHandle","validator","creator","formattedOrder","item","isStopOrder","useEffect","isNil","err","catch","broker_id","watchOrderbook","on","off","getPriceAndQty","quantity","Number","orderPrice","isNaN","LIMIT","price","MARKET","OrderSide","BUY","SELL","estLiqPrice","result","orderFee","orderUtils","qty","futuresTakeFeeRate","liqPrice","IMR_Factor","newOrder","estLeverage","leverage","submitting","helper","metaState","dirty","symbolConfig"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
package/lib/version.d.ts CHANGED
@@ -5,6 +5,6 @@ declare global {
5
5
  };
6
6
  }
7
7
  }
8
- declare const _default: "1.5.15";
8
+ declare const _default: "1.5.16";
9
9
  export default _default;
10
10
  //# sourceMappingURL=version.d.ts.map
package/lib/version.js CHANGED
@@ -10,8 +10,8 @@ Object.defineProperty(exports, "default", {
10
10
  });
11
11
  if (typeof window !== 'undefined') {
12
12
  window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};
13
- window.__ORDERLY_VERSION__["@orderly.network/hooks"] = "1.5.15";
13
+ window.__ORDERLY_VERSION__["@orderly.network/hooks"] = "1.5.16";
14
14
  }
15
- const _default = "1.5.15";
15
+ const _default = "1.5.16";
16
16
 
17
17
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/version.ts"],"sourcesContent":["\ndeclare global {\n interface Window {\n __ORDERLY_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif(typeof window !== 'undefined') {\n window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};\n window.__ORDERLY_VERSION__[\"@orderly.network/hooks\"] = \"1.5.15\";\n};\n\nexport default \"1.5.15\";\n"],"names":["window","__ORDERLY_VERSION__"],"rangeMappings":";;;;;;;;;;;;;;","mappings":";;;;+BAaA;;;eAAA;;;AALA,IAAG,OAAOA,WAAW,aAAa;IAC9BA,OAAOC,mBAAmB,GAAGD,OAAOC,mBAAmB,IAAI,CAAC;IAC5DD,OAAOC,mBAAmB,CAAC,yBAAyB,GAAG;AAC3D;MAEA,WAAe"}
1
+ {"version":3,"sources":["../src/version.ts"],"sourcesContent":["\ndeclare global {\n interface Window {\n __ORDERLY_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif(typeof window !== 'undefined') {\n window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};\n window.__ORDERLY_VERSION__[\"@orderly.network/hooks\"] = \"1.5.16\";\n};\n\nexport default \"1.5.16\";\n"],"names":["window","__ORDERLY_VERSION__"],"rangeMappings":";;;;;;;;;;;;;;","mappings":";;;;+BAaA;;;eAAA;;;AALA,IAAG,OAAOA,WAAW,aAAa;IAC9BA,OAAOC,mBAAmB,GAAGD,OAAOC,mBAAmB,IAAI,CAAC;IAC5DD,OAAOC,mBAAmB,CAAC,yBAAyB,GAAG;AAC3D;MAEA,WAAe"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orderly.network/hooks",
3
- "version": "1.5.15",
3
+ "version": "1.5.16",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "module": "esm/index.js",
@@ -33,7 +33,7 @@
33
33
  "tsup": "^7.1.0",
34
34
  "typedoc": "^0.26.5",
35
35
  "typescript": "^5.1.6",
36
- "tsconfig": "0.3.15"
36
+ "tsconfig": "0.3.16"
37
37
  },
38
38
  "dependencies": {
39
39
  "@akamfoad/qr": "^0.4.0",
@@ -41,11 +41,11 @@
41
41
  "swr": "2.2.4",
42
42
  "use-constant": "^1.1.1",
43
43
  "use-debounce": "^9.0.4",
44
- "@orderly.network/core": "1.5.15",
45
- "@orderly.network/net": "1.5.15",
46
- "@orderly.network/types": "1.5.15",
47
- "@orderly.network/perp": "3.3.15",
48
- "@orderly.network/utils": "1.5.15"
44
+ "@orderly.network/perp": "3.3.16",
45
+ "@orderly.network/core": "1.5.16",
46
+ "@orderly.network/net": "1.5.16",
47
+ "@orderly.network/types": "1.5.16",
48
+ "@orderly.network/utils": "1.5.16"
49
49
  },
50
50
  "publishConfig": {
51
51
  "access": "public"