@orderly.network/hooks 1.4.0-alpha.0 → 1.4.0-alpha.1

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.
Files changed (61) hide show
  1. package/esm/configProvider.d.ts.map +1 -1
  2. package/esm/configProvider.js +3 -2
  3. package/esm/configProvider.js.map +1 -1
  4. package/esm/dev/proxyConfigStore.d.ts +15 -0
  5. package/esm/dev/proxyConfigStore.d.ts.map +1 -0
  6. package/esm/dev/proxyConfigStore.js +41 -0
  7. package/esm/dev/proxyConfigStore.js.map +1 -0
  8. package/esm/orderly/orderlyHooks.d.ts +1 -1
  9. package/esm/orderly/orderlyHooks.js +1 -1
  10. package/esm/orderly/orderlyHooks.js.map +1 -1
  11. package/esm/orderly/useOrderStream/useOrderStream.d.ts +2 -1
  12. package/esm/orderly/useOrderStream/useOrderStream.d.ts.map +1 -1
  13. package/esm/orderly/useOrderStream/useOrderStream.js +21 -10
  14. package/esm/orderly/useOrderStream/useOrderStream.js.map +1 -1
  15. package/esm/orderly/useTakeProfitAndStopLoss/index.d.ts +3 -5
  16. package/esm/orderly/useTakeProfitAndStopLoss/index.d.ts.map +1 -1
  17. package/esm/orderly/useTakeProfitAndStopLoss/index.js +1 -1
  18. package/esm/orderly/useTakeProfitAndStopLoss/index.js.map +1 -1
  19. package/esm/orderly/useTakeProfitAndStopLoss/useTPSL.d.ts +3 -5
  20. package/esm/orderly/useTakeProfitAndStopLoss/useTPSL.d.ts.map +1 -1
  21. package/esm/orderly/useTakeProfitAndStopLoss/useTPSL.js +9 -10
  22. package/esm/orderly/useTakeProfitAndStopLoss/useTPSL.js.map +1 -1
  23. package/esm/orderly/useTakeProfitAndStopLoss/utils.d.ts.map +1 -1
  24. package/esm/orderly/useTakeProfitAndStopLoss/utils.js +24 -11
  25. package/esm/orderly/useTakeProfitAndStopLoss/utils.js.map +1 -1
  26. package/esm/services/orderCreator/tpslOrderCreator.js +1 -1
  27. package/esm/services/orderCreator/tpslOrderCreator.js.map +1 -1
  28. package/esm/version.d.ts +1 -1
  29. package/esm/version.js +2 -2
  30. package/esm/version.js.map +1 -1
  31. package/lib/configProvider.d.ts.map +1 -1
  32. package/lib/configProvider.js +3 -2
  33. package/lib/configProvider.js.map +1 -1
  34. package/lib/dev/proxyConfigStore.d.ts +15 -0
  35. package/lib/dev/proxyConfigStore.d.ts.map +1 -0
  36. package/lib/dev/proxyConfigStore.js +51 -0
  37. package/lib/dev/proxyConfigStore.js.map +1 -0
  38. package/lib/orderly/orderlyHooks.d.ts +1 -1
  39. package/lib/orderly/orderlyHooks.js +3 -3
  40. package/lib/orderly/orderlyHooks.js.map +1 -1
  41. package/lib/orderly/useOrderStream/useOrderStream.d.ts +2 -1
  42. package/lib/orderly/useOrderStream/useOrderStream.d.ts.map +1 -1
  43. package/lib/orderly/useOrderStream/useOrderStream.js +21 -10
  44. package/lib/orderly/useOrderStream/useOrderStream.js.map +1 -1
  45. package/lib/orderly/useTakeProfitAndStopLoss/index.d.ts +3 -5
  46. package/lib/orderly/useTakeProfitAndStopLoss/index.d.ts.map +1 -1
  47. package/lib/orderly/useTakeProfitAndStopLoss/index.js +3 -3
  48. package/lib/orderly/useTakeProfitAndStopLoss/index.js.map +1 -1
  49. package/lib/orderly/useTakeProfitAndStopLoss/useTPSL.d.ts +3 -5
  50. package/lib/orderly/useTakeProfitAndStopLoss/useTPSL.d.ts.map +1 -1
  51. package/lib/orderly/useTakeProfitAndStopLoss/useTPSL.js +9 -10
  52. package/lib/orderly/useTakeProfitAndStopLoss/useTPSL.js.map +1 -1
  53. package/lib/orderly/useTakeProfitAndStopLoss/utils.d.ts.map +1 -1
  54. package/lib/orderly/useTakeProfitAndStopLoss/utils.js +12 -10
  55. package/lib/orderly/useTakeProfitAndStopLoss/utils.js.map +1 -1
  56. package/lib/services/orderCreator/tpslOrderCreator.js +1 -1
  57. package/lib/services/orderCreator/tpslOrderCreator.js.map +1 -1
  58. package/lib/version.d.ts +1 -1
  59. package/lib/version.js +2 -2
  60. package/lib/version.js.map +1 -1
  61. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/orderly/useOrderStream/useOrderStream.ts"],"sourcesContent":["import { usePrivateInfiniteQuery } from \"../../usePrivateInfiniteQuery\";\nimport { useCallback, useEffect, useMemo } from \"react\";\nimport {\n OrderSide,\n OrderEntity,\n OrderStatus,\n API,\n AlgoOrderRootType,\n} from \"@orderly.network/types\";\nimport { useMarkPricesStream } from \"../useMarkPricesStream\";\nimport { useMutation } from \"../../useMutation\";\nimport version from \"../../version\";\nimport { useDataCenterContext } from \"../../dataProvider\";\nimport { generateKeyFun } from \"../../utils/swr\";\nimport { useEventEmitter } from \"../../useEventEmitter\";\nimport { SDKError } from \"@orderly.network/types\";\n\ntype CreateOrderType = \"normalOrder\" | \"algoOrder\";\n\ntype CombineOrderType = AlgoOrderRootType | \"ALL\";\n\nexport const useOrderStream = (\n /**\n * Orders query params\n */\n params: {\n symbol?: string;\n status?: OrderStatus;\n size?: number;\n side?: OrderSide;\n /**\n * Include the order type\n * @default [\"ALL\"]\n */\n includes?: CombineOrderType[];\n /**\n * Exclude the order type\n * @default []\n */\n excludes?: CombineOrderType[];\n },\n options?: {\n /**\n * Keep the state update alive\n */\n keeplive?: boolean;\n /**\n * Stop the state update when the component unmount\n */\n stopOnUnmount?: boolean;\n }\n) => {\n const {\n status,\n symbol,\n side,\n size = 100,\n includes = [\"ALL\"],\n excludes = [],\n } = params;\n\n const { data: markPrices = {} } = useMarkPricesStream();\n\n const { regesterKeyHandler, unregisterKeyHandler } = useDataCenterContext();\n const [\n doCancelOrder,\n { error: cancelOrderError, isMutating: cancelMutating },\n ] = useMutation(\"/v1/order\", \"DELETE\");\n\n const [doCancelAllOrders] = useMutation(\"/v1/orders\", \"DELETE\");\n\n const [\n doUpdateOrder,\n { error: updateOrderError, isMutating: updateMutating },\n ] = useMutation(\"/v1/order\", \"PUT\");\n\n const [\n doCanceAlgolOrder,\n { error: cancelAlgoOrderError, isMutating: cancelAlgoMutating },\n ] = useMutation(\"/v1/algo/order\", \"DELETE\");\n\n const [doCancelAllAlgoOrders] = useMutation(\"/v1/algo/orders\", \"DELETE\");\n\n const [\n doUpdateAlgoOrder,\n { error: updateAlgoOrderError, isMutating: updateAlgoMutating },\n ] = useMutation(\"/v1/algo/order\", \"PUT\");\n\n useEffect(() => {\n const formatKey = (value?: string) => (value ? `:${value}` : \"\");\n const key = `orders${formatKey(status)}${formatKey(symbol)}${formatKey(\n side\n )}`;\n regesterKeyHandler?.(key, generateKeyFun({ status, symbol, side, size }));\n\n return () => {\n if (!options?.stopOnUnmount) return;\n\n unregisterKeyHandler(key);\n };\n }, [status, symbol, side, options?.keeplive]);\n\n const ordersResponse = usePrivateInfiniteQuery(\n generateKeyFun({ status, symbol, side, size }),\n {\n initialSize: 1,\n // revalidateFirstPage: false,\n // onError: (err) => {\n // console.error(\"fetch failed::::\", err);\n // },\n formatter: (data) => data,\n revalidateOnFocus: false,\n }\n );\n\n const flattenOrders = useMemo(() => {\n if (!ordersResponse.data) {\n return null;\n }\n let orders = ordersResponse.data?.map((item) => item.rows)?.flat();\n\n // return ordersResponse.data?.map((item) => item.rows)?.flat();\n\n if (includes.includes(\"ALL\") && excludes.length === 0) {\n return orders;\n }\n\n if (includes.includes(\"ALL\") && excludes.length > 0) {\n return orders?.filter((item) => !excludes.includes(item.algo_type));\n }\n\n if (includes.length > 0 && excludes.length === 0) {\n return orders?.filter((item) => includes.includes(item.algo_type));\n }\n\n if (includes.length > 0 && excludes.length > 0) {\n return orders?.filter(\n (item) =>\n includes.includes(item.algo_type) &&\n !excludes.includes(item.algo_type)\n );\n }\n\n return orders;\n }, [ordersResponse.data, includes, excludes]);\n\n // console.log(ordersResponse.data);\n\n const orders = useMemo(() => {\n if (!flattenOrders) {\n return null;\n }\n\n if (status !== OrderStatus.NEW && status !== OrderStatus.INCOMPLETE) {\n return flattenOrders;\n }\n return flattenOrders.map((item) => {\n const order = {\n ...item,\n mark_price: (markPrices as any)[item.symbol] ?? 0,\n };\n\n ///TODO: remove this when BE provides the correct data\n // console.log(\"------------->>>>>>>>\", order);\n if (\n order.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL ||\n order.algo_type === AlgoOrderRootType.TP_SL\n ) {\n order.quantity = order.child_orders[0].quantity;\n }\n ///-----------------todo end----------------\n\n return order;\n });\n }, [flattenOrders, markPrices, status]);\n\n const total = useMemo(() => {\n return orders?.length || 0;\n // return ordersResponse.data?.[0]?.meta?.total || 0;\n }, [orders?.length]);\n\n /**\n * cancel all orders\n */\n const cancelAllOrders = useCallback(() => {\n return Promise.all([\n doCancelAllOrders(null),\n doCancelAllAlgoOrders(null, { algo_type: \"STOP\" }),\n ]);\n }, [ordersResponse.data]);\n\n const cancelAllAlgoOrders = useCallback(() => {\n return Promise.all([\n doCancelAllAlgoOrders(null, { algo_type: \"TP_SL\" }),\n doCancelAllAlgoOrders(null, { algo_type: \"POSITIONAL_TP_SL\" }),\n ]);\n }, [ordersResponse.data]);\n\n const _updateOrder = useCallback(\n (orderId: string, order: OrderEntity, type: CreateOrderType) => {\n switch (type) {\n case \"algoOrder\":\n return doUpdateAlgoOrder({\n order_id: orderId,\n price: order[\"order_price\"],\n quantity: order[\"order_quantity\"],\n trigger_price: order[\"trigger_price\"],\n });\n default:\n return doUpdateOrder({ ...order, order_id: orderId });\n }\n },\n []\n );\n\n /**\n * update order\n */\n const updateOrder = useCallback((orderId: string, order: OrderEntity) => {\n return _updateOrder(orderId, order, \"normalOrder\");\n }, []);\n\n /**\n * update algo order\n */\n const updateAlgoOrder = useCallback((orderId: string, order: OrderEntity) => {\n return _updateOrder(orderId, order, \"algoOrder\");\n }, []);\n\n const _cancelOrder = useCallback(\n (orderId: number, type: CreateOrderType, symbol?: string) => {\n switch (type) {\n case \"algoOrder\":\n return doCanceAlgolOrder(null, {\n // @ts-ignore\n order_id: orderId,\n symbol,\n source: `SDK${version}`,\n }).then((res: any) => {\n if (res.success) {\n ordersResponse.mutate();\n return res;\n } else {\n throw new Error(res.message);\n }\n });\n default:\n return doCancelOrder(null, {\n order_id: orderId,\n symbol,\n source: `SDK_${version}`,\n }).then((res: any) => {\n if (res.success) {\n // return ordersResponse.mutate().then(() => {\n // return res;\n // });\n //Optimistic Updates\n // ordersResponse.mutate();\n return res;\n } else {\n throw new Error(res.message);\n }\n });\n }\n },\n []\n );\n /**\n * calcel order\n */\n const cancelOrder = useCallback((orderId: number, symbol?: string) => {\n return _cancelOrder(orderId, \"normalOrder\", symbol);\n }, []);\n\n /**\n * calcel algo order\n */\n const cancelAlgoOrder = useCallback((orderId: number, symbol?: string) => {\n return _cancelOrder(orderId, \"algoOrder\", symbol);\n }, []);\n\n const loadMore = () => {\n ordersResponse.setSize(ordersResponse.size + 1);\n };\n\n // const cancelTPSLOrder = useCallback((orderId:number, symbol:string)=>{\n // return\n // });\n\n const cancelTPSLChildOrder = useCallback(\n (orderId: number, rootAlgoOrderId: number): Promise<any> => {\n return doUpdateAlgoOrder({\n order_id: rootAlgoOrderId,\n child_orders: [\n {\n order_id: orderId,\n is_activated: false,\n },\n ],\n });\n },\n []\n );\n\n const updateTPSLOrder = useCallback(\n (\n /**\n * the root algo order id\n */\n orderId: number,\n childOrders: API.AlgoOrder[\"child_orders\"]\n ) => {\n if (!Array.isArray(childOrders)) {\n throw new SDKError(\"children orders is required\");\n }\n return doUpdateAlgoOrder({\n order_id: orderId,\n children_orders: childOrders,\n });\n },\n []\n );\n\n return [\n orders,\n {\n total,\n isLoading: ordersResponse.isLoading,\n refresh: ordersResponse.mutate,\n loadMore,\n cancelAllOrders,\n cancelAllAlgoOrders,\n updateOrder,\n cancelOrder,\n updateAlgoOrder,\n cancelAlgoOrder,\n cancelTPSLChildOrder,\n updateTPSLOrder,\n errors: {\n cancelOrder: cancelOrderError,\n updateOrder: updateOrderError,\n cancelAlgoOrder: cancelAlgoOrderError,\n updateAlgoOrder: updateAlgoOrderError,\n },\n submitting: {\n cancelOrder: cancelMutating,\n updateOrder: updateMutating,\n cancelAlgoOrder: cancelAlgoMutating,\n updateAlglOrder: updateAlgoMutating,\n },\n },\n ] as const;\n};\n"],"names":["useOrderStream","params","options","status","symbol","side","size","includes","excludes","data","markPrices","useMarkPricesStream","regesterKeyHandler","unregisterKeyHandler","useDataCenterContext","doCancelOrder","error","cancelOrderError","isMutating","cancelMutating","useMutation","doCancelAllOrders","doUpdateOrder","updateOrderError","updateMutating","doCanceAlgolOrder","cancelAlgoOrderError","cancelAlgoMutating","doCancelAllAlgoOrders","doUpdateAlgoOrder","updateAlgoOrderError","updateAlgoMutating","useEffect","formatKey","value","key","generateKeyFun","stopOnUnmount","keeplive","ordersResponse","usePrivateInfiniteQuery","initialSize","formatter","revalidateOnFocus","flattenOrders","useMemo","orders","map","item","rows","flat","length","filter","algo_type","OrderStatus","NEW","INCOMPLETE","order","mark_price","AlgoOrderRootType","POSITIONAL_TP_SL","TP_SL","quantity","child_orders","total","cancelAllOrders","useCallback","Promise","all","cancelAllAlgoOrders","_updateOrder","orderId","type","order_id","price","trigger_price","updateOrder","updateAlgoOrder","_cancelOrder","source","version","then","res","success","mutate","Error","message","cancelOrder","cancelAlgoOrder","loadMore","setSize","cancelTPSLChildOrder","rootAlgoOrderId","is_activated","updateTPSLOrder","childOrders","Array","isArray","SDKError","children_orders","isLoading","refresh","errors","submitting","updateAlglOrder"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../../src/orderly/useOrderStream/useOrderStream.ts"],"sourcesContent":["import { usePrivateInfiniteQuery } from \"../../usePrivateInfiniteQuery\";\nimport { useCallback, useEffect, useMemo } from \"react\";\nimport {\n OrderSide,\n OrderEntity,\n OrderStatus,\n API,\n AlgoOrderRootType,\n} from \"@orderly.network/types\";\nimport { useMarkPricesStream } from \"../useMarkPricesStream\";\nimport { useMutation } from \"../../useMutation\";\nimport version from \"../../version\";\nimport { useDataCenterContext } from \"../../dataProvider\";\nimport { generateKeyFun } from \"../../utils/swr\";\nimport { useEventEmitter } from \"../../useEventEmitter\";\nimport { SDKError } from \"@orderly.network/types\";\nimport { AlgoOrderType } from \"@orderly.network/types\";\n\ntype CreateOrderType = \"normalOrder\" | \"algoOrder\";\n\ntype CombineOrderType = AlgoOrderRootType | \"ALL\";\n\nexport const useOrderStream = (\n /**\n * Orders query params\n */\n params: {\n symbol?: string;\n status?: OrderStatus;\n size?: number;\n side?: OrderSide;\n /**\n * Include the order type\n * @default [\"ALL\"]\n */\n includes?: CombineOrderType[];\n /**\n * Exclude the order type\n * @default []\n */\n excludes?: CombineOrderType[];\n },\n options?: {\n /**\n * Keep the state update alive\n */\n keeplive?: boolean;\n /**\n * Stop the state update when the component unmount\n */\n stopOnUnmount?: boolean;\n }\n) => {\n const {\n status,\n symbol,\n side,\n size = 100,\n includes = [\"ALL\"],\n excludes = [],\n } = params;\n\n const { data: markPrices = {} } = useMarkPricesStream();\n\n const { regesterKeyHandler, unregisterKeyHandler } = useDataCenterContext();\n const [\n doCancelOrder,\n { error: cancelOrderError, isMutating: cancelMutating },\n ] = useMutation(\"/v1/order\", \"DELETE\");\n\n const [doCancelAllOrders] = useMutation(\"/v1/orders\", \"DELETE\");\n\n const [\n doUpdateOrder,\n { error: updateOrderError, isMutating: updateMutating },\n ] = useMutation(\"/v1/order\", \"PUT\");\n\n const [\n doCanceAlgolOrder,\n { error: cancelAlgoOrderError, isMutating: cancelAlgoMutating },\n ] = useMutation(\"/v1/algo/order\", \"DELETE\");\n\n const [doCancelAllAlgoOrders] = useMutation(\"/v1/algo/orders\", \"DELETE\");\n\n const [\n doUpdateAlgoOrder,\n { error: updateAlgoOrderError, isMutating: updateAlgoMutating },\n ] = useMutation(\"/v1/algo/order\", \"PUT\");\n\n useEffect(() => {\n const formatKey = (value?: string) => (value ? `:${value}` : \"\");\n const key = `orders${formatKey(status)}${formatKey(symbol)}${formatKey(\n side\n )}`;\n regesterKeyHandler?.(key, generateKeyFun({ status, symbol, side, size }));\n\n return () => {\n if (!options?.stopOnUnmount) return;\n\n unregisterKeyHandler(key);\n };\n }, [status, symbol, side, options?.keeplive]);\n\n const ordersResponse = usePrivateInfiniteQuery(\n generateKeyFun({ status, symbol, side, size }),\n {\n initialSize: 1,\n // revalidateFirstPage: false,\n // onError: (err) => {\n // console.error(\"fetch failed::::\", err);\n // },\n formatter: (data) => data,\n revalidateOnFocus: false,\n }\n );\n\n const flattenOrders = useMemo(() => {\n if (!ordersResponse.data) {\n return null;\n }\n let orders = ordersResponse.data?.map((item) => item.rows)?.flat();\n\n // return ordersResponse.data?.map((item) => item.rows)?.flat();\n\n if (includes.includes(\"ALL\") && excludes.length === 0) {\n return orders;\n }\n\n if (includes.includes(\"ALL\") && excludes.length > 0) {\n return orders?.filter((item) => !excludes.includes(item.algo_type));\n }\n\n if (includes.length > 0 && excludes.length === 0) {\n return orders?.filter((item) => includes.includes(item.algo_type));\n }\n\n if (includes.length > 0 && excludes.length > 0) {\n return orders?.filter(\n (item) =>\n includes.includes(item.algo_type) &&\n !excludes.includes(item.algo_type)\n );\n }\n\n return orders;\n }, [ordersResponse.data, includes, excludes]);\n\n // console.log(ordersResponse.data);\n\n const orders = useMemo(() => {\n if (!flattenOrders) {\n return null;\n }\n\n if (status !== OrderStatus.NEW && status !== OrderStatus.INCOMPLETE) {\n return flattenOrders;\n }\n return flattenOrders.map((item) => {\n const order = {\n ...item,\n mark_price: (markPrices as any)[item.symbol] ?? 0,\n };\n\n ///TODO: remove this when BE provides the correct data\n // console.log(\"------------->>>>>>>>\", order);\n if (\n order.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL ||\n order.algo_type === AlgoOrderRootType.TP_SL\n ) {\n order.quantity = order.child_orders[0].quantity;\n }\n ///-----------------todo end----------------\n\n return order;\n });\n }, [flattenOrders, markPrices, status]);\n\n const total = useMemo(() => {\n return orders?.length || 0;\n // return ordersResponse.data?.[0]?.meta?.total || 0;\n }, [orders?.length]);\n\n const cancelAlgoOrdersByTypes = (types: AlgoOrderRootType[]) => {\n if (!types) {\n throw new SDKError(\"types is required\");\n }\n\n if (!Array.isArray(types)) {\n throw new SDKError(\"types should be an array\");\n }\n\n // TODO: order type check\n\n return Promise.all(\n types.map((type) => {\n return doCancelAllAlgoOrders(null, { algo_type: type });\n })\n );\n };\n\n /**\n * cancel all orders\n */\n const cancelAllOrders = useCallback(() => {\n return Promise.all([\n doCancelAllOrders(null),\n doCancelAllAlgoOrders(null, { algo_type: \"STOP\" }),\n ]);\n }, [ordersResponse.data]);\n\n const cancelAllTPSLOrders = useCallback(() => {\n return cancelAlgoOrdersByTypes([\n AlgoOrderRootType.POSITIONAL_TP_SL,\n AlgoOrderRootType.TP_SL,\n ]);\n }, [ordersResponse.data]);\n\n const _updateOrder = useCallback(\n (orderId: string, order: OrderEntity, type: CreateOrderType) => {\n switch (type) {\n case \"algoOrder\":\n return doUpdateAlgoOrder({\n order_id: orderId,\n price: order[\"order_price\"],\n quantity: order[\"order_quantity\"],\n trigger_price: order[\"trigger_price\"],\n });\n default:\n return doUpdateOrder({ ...order, order_id: orderId });\n }\n },\n []\n );\n\n /**\n * update order\n */\n const updateOrder = useCallback((orderId: string, order: OrderEntity) => {\n return _updateOrder(orderId, order, \"normalOrder\");\n }, []);\n\n /**\n * update algo order\n */\n const updateAlgoOrder = useCallback((orderId: string, order: OrderEntity) => {\n return _updateOrder(orderId, order, \"algoOrder\");\n }, []);\n\n const _cancelOrder = useCallback(\n (orderId: number, type: CreateOrderType, symbol?: string) => {\n switch (type) {\n case \"algoOrder\":\n return doCanceAlgolOrder(null, {\n // @ts-ignore\n order_id: orderId,\n symbol,\n source: `SDK${version}`,\n }).then((res: any) => {\n if (res.success) {\n ordersResponse.mutate();\n return res;\n } else {\n throw new Error(res.message);\n }\n });\n default:\n return doCancelOrder(null, {\n order_id: orderId,\n symbol,\n source: `SDK_${version}`,\n }).then((res: any) => {\n if (res.success) {\n // return ordersResponse.mutate().then(() => {\n // return res;\n // });\n //Optimistic Updates\n // ordersResponse.mutate();\n return res;\n } else {\n throw new Error(res.message);\n }\n });\n }\n },\n []\n );\n /**\n * calcel order\n */\n const cancelOrder = useCallback((orderId: number, symbol?: string) => {\n return _cancelOrder(orderId, \"normalOrder\", symbol);\n }, []);\n\n /**\n * calcel algo order\n */\n const cancelAlgoOrder = useCallback((orderId: number, symbol?: string) => {\n return _cancelOrder(orderId, \"algoOrder\", symbol);\n }, []);\n\n const loadMore = () => {\n ordersResponse.setSize(ordersResponse.size + 1);\n };\n\n // const cancelTPSLOrder = useCallback((orderId:number, symbol:string)=>{\n // return\n // });\n\n const cancelTPSLChildOrder = useCallback(\n (orderId: number, rootAlgoOrderId: number): Promise<any> => {\n return doUpdateAlgoOrder({\n order_id: rootAlgoOrderId,\n child_orders: [\n {\n order_id: orderId,\n is_activated: false,\n },\n ],\n });\n },\n []\n );\n\n const updateTPSLOrder = useCallback(\n (\n /**\n * the root algo order id\n */\n orderId: number,\n childOrders: API.AlgoOrder[\"child_orders\"]\n ) => {\n if (!Array.isArray(childOrders)) {\n throw new SDKError(\"children orders is required\");\n }\n return doUpdateAlgoOrder({\n order_id: orderId,\n child_orders: childOrders,\n });\n },\n []\n );\n\n return [\n orders,\n {\n total,\n isLoading: ordersResponse.isLoading,\n refresh: ordersResponse.mutate,\n loadMore,\n cancelAllOrders,\n cancelAllTPSLOrders,\n cancelAlgoOrdersByTypes,\n updateOrder,\n cancelOrder,\n updateAlgoOrder,\n cancelAlgoOrder,\n cancelTPSLChildOrder,\n updateTPSLOrder,\n errors: {\n cancelOrder: cancelOrderError,\n updateOrder: updateOrderError,\n cancelAlgoOrder: cancelAlgoOrderError,\n updateAlgoOrder: updateAlgoOrderError,\n },\n submitting: {\n cancelOrder: cancelMutating,\n updateOrder: updateMutating,\n cancelAlgoOrder: cancelAlgoMutating,\n updateAlglOrder: updateAlgoMutating,\n },\n },\n ] as const;\n};\n"],"names":["useOrderStream","params","options","status","symbol","side","size","includes","excludes","data","markPrices","useMarkPricesStream","regesterKeyHandler","unregisterKeyHandler","useDataCenterContext","doCancelOrder","error","cancelOrderError","isMutating","cancelMutating","useMutation","doCancelAllOrders","doUpdateOrder","updateOrderError","updateMutating","doCanceAlgolOrder","cancelAlgoOrderError","cancelAlgoMutating","doCancelAllAlgoOrders","doUpdateAlgoOrder","updateAlgoOrderError","updateAlgoMutating","useEffect","formatKey","value","key","generateKeyFun","stopOnUnmount","keeplive","ordersResponse","usePrivateInfiniteQuery","initialSize","formatter","revalidateOnFocus","flattenOrders","useMemo","orders","map","item","rows","flat","length","filter","algo_type","OrderStatus","NEW","INCOMPLETE","order","mark_price","AlgoOrderRootType","POSITIONAL_TP_SL","TP_SL","quantity","child_orders","total","cancelAlgoOrdersByTypes","types","SDKError","Array","isArray","Promise","all","type","cancelAllOrders","useCallback","cancelAllTPSLOrders","_updateOrder","orderId","order_id","price","trigger_price","updateOrder","updateAlgoOrder","_cancelOrder","source","version","then","res","success","mutate","Error","message","cancelOrder","cancelAlgoOrder","loadMore","setSize","cancelTPSLChildOrder","rootAlgoOrderId","is_activated","updateTPSLOrder","childOrders","isLoading","refresh","errors","submitting","updateAlglOrder"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { API, AlgoOrderEntity } from "@orderly.network/types";
2
- export declare const useStopOrder: (position: Partial<API.PositionTPSLExt> & Pick<API.PositionTPSLExt, "symbol" | "average_open_price" | "position_qty">, options?: {
1
+ import { API } from "@orderly.network/types";
2
+ export declare const useTPSLOrder: (position: Partial<API.PositionTPSLExt> & Pick<API.PositionTPSLExt, "symbol" | "average_open_price" | "position_qty">, options?: {
3
3
  /**
4
4
  * You can set the default value for the take profit and stop loss order,
5
5
  * it is usually used when editing order
@@ -23,10 +23,8 @@ export declare const useStopOrder: (position: Partial<API.PositionTPSLExt> & Pic
23
23
  sl_offset_percentage: number;
24
24
  }>, "type" | "side" | "order_type" | "trigger_price">>>) => void;
25
25
  submit: () => Promise<void>;
26
- create: () => Promise<void>;
27
- update: (orderId: number) => Promise<any>;
28
26
  errors: import("./useTPSL").ValidateError | null;
29
- validate: () => Promise<AlgoOrderEntity<import("@orderly.network/types").AlgoOrderRootType.TP_SL | import("@orderly.network/types").AlgoOrderRootType.POSITIONAL_TP_SL>>;
27
+ validate: () => Promise<import("@orderly.network/types").AlgoOrderEntity<import("@orderly.network/types").AlgoOrderRootType.TP_SL | import("@orderly.network/types").AlgoOrderRootType.POSITIONAL_TP_SL>>;
30
28
  }];
31
29
  export type { ComputedAlgoOrder } from "./useTPSL";
32
30
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/orderly/useTakeProfitAndStopLoss/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,eAAe,EAAY,MAAM,wBAAwB,CAAC;AAIxE,eAAO,MAAM,YAAY,aAIb,QAAQ,IAAI,eAAe,CAAC,GACpC,KAAK,IAAI,eAAe,EAAE,QAAQ,GAAG,oBAAoB,GAAG,cAAc,CAAC,YACnE;IACR;;;OAGG;IACH,YAAY,CAAC,EAAE,IAAI,SAAS,CAAC;CAC9B;;;;;;;;;;;;;;;;;;;;;;EAuBF,CAAC;AAEF,YAAY,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/orderly/useTakeProfitAndStopLoss/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAY,MAAM,wBAAwB,CAAC;AAGvD,eAAO,MAAM,YAAY,aAIb,QAAQ,IAAI,eAAe,CAAC,GACpC,KAAK,IAAI,eAAe,EAAE,QAAQ,GAAG,oBAAoB,GAAG,cAAc,CAAC,YACnE;IACR;;;OAGG;IACH,YAAY,CAAC,EAAE,IAAI,SAAS,CAAC;CAC9B;;;;;;;;;;;;;;;;;;;;EAuBF,CAAC;AAEF,YAAY,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC"}
@@ -2,15 +2,15 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- Object.defineProperty(exports, "useStopOrder", {
5
+ Object.defineProperty(exports, "useTPSLOrder", {
6
6
  enumerable: true,
7
7
  get: function() {
8
- return useStopOrder;
8
+ return useTPSLOrder;
9
9
  }
10
10
  });
11
11
  const _types = require("@orderly.network/types");
12
12
  const _useTPSL = require("./useTPSL");
13
- const useStopOrder = (/**
13
+ const useTPSLOrder = (/**
14
14
  * Position that needs to set take profit and stop loss
15
15
  */ position, options)=>{
16
16
  if (!position) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/orderly/useTakeProfitAndStopLoss/index.ts"],"sourcesContent":["import { API, AlgoOrderEntity, SDKError } from \"@orderly.network/types\";\nimport { useTaskProfitAndStopLossInternal } from \"./useTPSL\";\nimport { useMarkPrice } from \"../useMarkPrice\";\n\nexport const useStopOrder = (\n /**\n * Position that needs to set take profit and stop loss\n */\n position: Partial<API.PositionTPSLExt> &\n Pick<API.PositionTPSLExt, \"symbol\" | \"average_open_price\" | \"position_qty\">,\n options?: {\n /**\n * You can set the default value for the take profit and stop loss order,\n * it is usually used when editing order\n */\n defaultOrder?: API.AlgoOrder;\n }\n): ReturnType<typeof useTaskProfitAndStopLossInternal> => {\n if (!position) {\n throw new SDKError(\"Position is required\");\n }\n\n if (!position.symbol) {\n throw new SDKError(\"Symbol is required\");\n }\n\n if (typeof position.average_open_price === \"undefined\") {\n throw new SDKError(\"Average open price is required\");\n }\n\n if (typeof position.position_qty === \"undefined\") {\n throw new SDKError(\"Position quantity is required\");\n }\n\n // const { data: markPrice } = useMarkPrice(position.symbol);\n\n const result = useTaskProfitAndStopLossInternal(position, options);\n\n return result;\n};\n\nexport type { ComputedAlgoOrder } from \"./useTPSL\";\n"],"names":["useStopOrder","position","options","SDKError","symbol","average_open_price","position_qty","result","useTaskProfitAndStopLossInternal"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;+BAIaA;;;eAAAA;;;uBAJkC;yBACE;AAG1C,MAAMA,eAAe,CAC1B;;GAEC,GACDC,UAEAC;IAQA,IAAI,CAACD,UAAU;QACb,MAAM,IAAIE,eAAQ,CAAC;IACrB;IAEA,IAAI,CAACF,SAASG,MAAM,EAAE;QACpB,MAAM,IAAID,eAAQ,CAAC;IACrB;IAEA,IAAI,OAAOF,SAASI,kBAAkB,KAAK,aAAa;QACtD,MAAM,IAAIF,eAAQ,CAAC;IACrB;IAEA,IAAI,OAAOF,SAASK,YAAY,KAAK,aAAa;QAChD,MAAM,IAAIH,eAAQ,CAAC;IACrB;IAEA,6DAA6D;IAE7D,MAAMI,SAASC,IAAAA,yCAAgC,EAACP,UAAUC;IAE1D,OAAOK;AACT"}
1
+ {"version":3,"sources":["../../../src/orderly/useTakeProfitAndStopLoss/index.ts"],"sourcesContent":["import { API, SDKError } from \"@orderly.network/types\";\nimport { useTaskProfitAndStopLossInternal } from \"./useTPSL\";\n\nexport const useTPSLOrder = (\n /**\n * Position that needs to set take profit and stop loss\n */\n position: Partial<API.PositionTPSLExt> &\n Pick<API.PositionTPSLExt, \"symbol\" | \"average_open_price\" | \"position_qty\">,\n options?: {\n /**\n * You can set the default value for the take profit and stop loss order,\n * it is usually used when editing order\n */\n defaultOrder?: API.AlgoOrder;\n }\n): ReturnType<typeof useTaskProfitAndStopLossInternal> => {\n if (!position) {\n throw new SDKError(\"Position is required\");\n }\n\n if (!position.symbol) {\n throw new SDKError(\"Symbol is required\");\n }\n\n if (typeof position.average_open_price === \"undefined\") {\n throw new SDKError(\"Average open price is required\");\n }\n\n if (typeof position.position_qty === \"undefined\") {\n throw new SDKError(\"Position quantity is required\");\n }\n\n // const { data: markPrice } = useMarkPrice(position.symbol);\n\n const result = useTaskProfitAndStopLossInternal(position, options);\n\n return result;\n};\n\nexport type { ComputedAlgoOrder } from \"./useTPSL\";\n"],"names":["useTPSLOrder","position","options","SDKError","symbol","average_open_price","position_qty","result","useTaskProfitAndStopLossInternal"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;+BAGaA;;;eAAAA;;;uBAHiB;yBACmB;AAE1C,MAAMA,eAAe,CAC1B;;GAEC,GACDC,UAEAC;IAQA,IAAI,CAACD,UAAU;QACb,MAAM,IAAIE,eAAQ,CAAC;IACrB;IAEA,IAAI,CAACF,SAASG,MAAM,EAAE;QACpB,MAAM,IAAID,eAAQ,CAAC;IACrB;IAEA,IAAI,OAAOF,SAASI,kBAAkB,KAAK,aAAa;QACtD,MAAM,IAAIF,eAAQ,CAAC;IACrB;IAEA,IAAI,OAAOF,SAASK,YAAY,KAAK,aAAa;QAChD,MAAM,IAAIH,eAAQ,CAAC;IACrB;IAEA,6DAA6D;IAE7D,MAAMI,SAASC,IAAAA,yCAAgC,EAACP,UAAUC;IAE1D,OAAOK;AACT"}
@@ -45,15 +45,13 @@ export declare const useTaskProfitAndStopLossInternal: (position: Partial<API.Po
45
45
  setValue: (key: string, value: number | string) => void;
46
46
  setValues: (values: Partial<ComputedAlgoOrder>) => void;
47
47
  /**
48
- * Submit the take profit and stop loss order
48
+ * Submit the TP/SL order
49
49
  */
50
50
  submit: () => Promise<void>;
51
+ errors: ValidateError | null;
51
52
  /**
52
- * Create the take profit and stop loss order, auto-detect the order type
53
+ *
53
54
  */
54
- create: () => Promise<void>;
55
- update: (orderId: number) => Promise<any>;
56
- errors: ValidateError | null;
57
55
  validate: () => Promise<AlgoOrderEntity<AlgoOrderRootType.POSITIONAL_TP_SL | AlgoOrderRootType.TP_SL>>;
58
56
  }];
59
57
  //# sourceMappingURL=useTPSL.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTPSL.d.ts","sourceRoot":"","sources":["../../../src/orderly/useTakeProfitAndStopLoss/useTPSL.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,GAAG,EACH,eAAe,EAGhB,MAAM,wBAAwB,CAAC;AAIhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAO3D,MAAM,MAAM,iBAAiB,GAAG,OAAO,CACrC,eAAe,CACb,iBAAiB,CAAC,KAAK,GAAG;IACxB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CACF,CACF,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;KACzB,CAAC,IAAI,MAAM,iBAAiB,CAAC,CAAC,EAAE;QAC/B,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB;CACF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gCAAgC,aACjC,QAAQ,IAAI,eAAe,CAAC,GACpC,KAAK,IAAI,eAAe,EAAE,QAAQ,GAAG,oBAAoB,GAAG,cAAc,CAAC,YACnE;IACR,YAAY,CAAC,EAAE,IAAI,SAAS,CAAC;CAC9B;IAhCG;;OAEG;YACK,MAAM;eACH,MAAM;0BACK,MAAM;IAE5B;;OAEG;YACK,MAAM;eACH,MAAM;0BACK,MAAM;;IAwB9B;;OAEG;oBACa,MAAM,SAAS,MAAM,GAAG,MAAM,KAAK,IAAI;wBACnC,QAAQ,iBAAiB,CAAC,KAAK,IAAI;IAEvD;;OAEG;YACK,MAAM,QAAQ,IAAI,CAAC;IAC3B;;OAEG;YACK,MAAM,QAAQ,IAAI,CAAC;sBACT,MAAM,KAAK,QAAQ,GAAG,CAAC;YACjC,aAAa,GAAG,IAAI;cAClB,MAAM,QACd,gBACE,kBAAkB,gBAAgB,GAAG,kBAAkB,KAAK,CAC7D,CACF;EAgSJ,CAAC"}
1
+ {"version":3,"file":"useTPSL.d.ts","sourceRoot":"","sources":["../../../src/orderly/useTakeProfitAndStopLoss/useTPSL.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,GAAG,EACH,eAAe,EAGhB,MAAM,wBAAwB,CAAC;AAIhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAO3D,MAAM,MAAM,iBAAiB,GAAG,OAAO,CACrC,eAAe,CACb,iBAAiB,CAAC,KAAK,GAAG;IACxB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CACF,CACF,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;KACzB,CAAC,IAAI,MAAM,iBAAiB,CAAC,CAAC,EAAE;QAC/B,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB;CACF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gCAAgC,aACjC,QAAQ,IAAI,eAAe,CAAC,GACpC,KAAK,IAAI,eAAe,EAAE,QAAQ,GAAG,oBAAoB,GAAG,cAAc,CAAC,YACnE;IACR,YAAY,CAAC,EAAE,IAAI,SAAS,CAAC;CAC9B;IAhCG;;OAEG;YACK,MAAM;eACH,MAAM;0BACK,MAAM;IAE5B;;OAEG;YACK,MAAM;eACH,MAAM;0BACK,MAAM;;IA2B9B;;OAEG;oBACa,MAAM,SAAS,MAAM,GAAG,MAAM,KAAK,IAAI;wBACnC,QAAQ,iBAAiB,CAAC,KAAK,IAAI;IAEvD;;OAEG;YACK,MAAM,QAAQ,IAAI,CAAC;YAMnB,aAAa,GAAG,IAAI;IAC5B;;OAEG;cACO,MAAM,QACd,gBACE,kBAAkB,gBAAgB,GAAG,kBAAkB,KAAK,CAC7D,CACF;EAmSJ,CAAC"}
@@ -46,7 +46,7 @@ const useTaskProfitAndStopLossInternal = (position, options)=>{
46
46
  }
47
47
  }, []);
48
48
  const _setOrderValue = (key, value, options)=>{
49
- ;
49
+ // console.log("[updateOrder:]", key, value, order.quantity);
50
50
  setOrder((prev)=>{
51
51
  const side = position.position_qty > 0 ? _types.OrderSide.BUY : _types.OrderSide.SELL;
52
52
  if (key === "sl_pnl") {
@@ -61,7 +61,6 @@ const useTaskProfitAndStopLossInternal = (position, options)=>{
61
61
  }, {
62
62
  symbol: symbolInfo
63
63
  });
64
- ;
65
64
  return {
66
65
  ...prev,
67
66
  ...newValue,
@@ -129,11 +128,9 @@ const useTaskProfitAndStopLossInternal = (position, options)=>{
129
128
  });
130
129
  });
131
130
  };
132
- (0, _react.useEffect)(()=>{
133
- // setError(validate());
134
- }, [
135
- order
136
- ]);
131
+ // useEffect(() => {
132
+ // // setError(validate());
133
+ // }, [order]);
137
134
  const compare = ()=>{
138
135
  const quantityNum = Number(order.quantity);
139
136
  if (isNaN(quantityNum)) return false;
@@ -173,6 +170,8 @@ const useTaskProfitAndStopLossInternal = (position, options)=>{
173
170
  if (orderBody.child_orders.length === 0) {
174
171
  throw new _types.SDKError("No child orders");
175
172
  }
173
+ // filter the order that is not activated
174
+ orderBody.child_orders = orderBody.child_orders.filter((order)=>order.is_activated);
176
175
  return doCreateOrder(orderBody);
177
176
  };
178
177
  const deleteOrder = (orderId, symbol)=>{
@@ -188,7 +187,7 @@ const useTaskProfitAndStopLossInternal = (position, options)=>{
188
187
  if (updatedOrderEntity.child_orders.length === 0) {
189
188
  return Promise.resolve("Not any order needs to update");
190
189
  }
191
- const needDelete = orderEntity.child_orders.filter((order)=>typeof order.is_activated === "boolean" && !order.is_activated).length === 2;
190
+ const needDelete = orderEntity.child_orders.filter((order)=>typeof order.is_activated === "boolean" && !order.is_activated).length === orderEntity.child_orders.length;
192
191
  if (needDelete) {
193
192
  return deleteOrder(orderId, order.symbol);
194
193
  }
@@ -203,8 +202,8 @@ const useTaskProfitAndStopLossInternal = (position, options)=>{
203
202
  ], order),
204
203
  {
205
204
  submit,
206
- create: submit,
207
- update: updateOrder,
205
+ // create: submit,
206
+ // update: updateOrder,/
208
207
  setValue: setOrderValue,
209
208
  setValues,
210
209
  // createPositionTPSL: submit,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/orderly/useTakeProfitAndStopLoss/useTPSL.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\nimport {\n API,\n AlgoOrderEntity,\n OrderSide,\n SDKError,\n} from \"@orderly.network/types\";\nimport { UpdateOrderKey, calculateHelper } from \"./utils\";\nimport { useMutation } from \"../../useMutation\";\nimport { OrderFactory } from \"../../services/orderCreator/factory\";\nimport { AlgoOrderRootType } from \"@orderly.network/types\";\nimport { TPSLPositionOrderCreator } from \"../../services/orderCreator/tpslPositionOrderCreator\";\nimport { findTPSLFromOrder } from \"../usePositionStream/utils\";\nimport { useSymbolsInfo } from \"../useSymbolsInfo\";\nimport { useMarkPrice } from \"../useMarkPrice\";\nimport { omit } from \"ramda\";\n\nexport type ComputedAlgoOrder = Partial<\n AlgoOrderEntity<\n AlgoOrderRootType.TP_SL & {\n /**\n * Computed take profit\n */\n tp_pnl: number;\n tp_offset: number;\n tp_offset_percentage: number;\n\n /**\n * Computed stop loss\n */\n sl_pnl: number;\n sl_offset: number;\n sl_offset_percentage: number;\n }\n >\n>;\n\nexport type ValidateError = {\n [P in keyof ComputedAlgoOrder]?: {\n type: string;\n message: string;\n };\n};\n\n/**\n * @hidden\n */\nexport const useTaskProfitAndStopLossInternal = (\n position: Partial<API.PositionTPSLExt> &\n Pick<API.PositionTPSLExt, \"symbol\" | \"average_open_price\" | \"position_qty\">,\n options?: {\n defaultOrder?: API.AlgoOrder;\n }\n): [\n ComputedAlgoOrder,\n {\n /**\n * Update the take profit and stop loss order, this will merge the new data with the old one\n */\n setValue: (key: string, value: number | string) => void;\n setValues: (values: Partial<ComputedAlgoOrder>) => void;\n // getOrderEntity: () => AlgoOrderEntity<AlgoOrderRootType.TP_SL|AlgoOrderRootType.POSITIONAL_TP_SL>;\n /**\n * Submit the take profit and stop loss order\n */\n submit: () => Promise<void>;\n /**\n * Create the take profit and stop loss order, auto-detect the order type\n */\n create: () => Promise<void>;\n update: (orderId: number) => Promise<any>;\n errors: ValidateError | null;\n validate: () => Promise<\n AlgoOrderEntity<\n AlgoOrderRootType.POSITIONAL_TP_SL | AlgoOrderRootType.TP_SL\n >\n >;\n }\n] => {\n const [order, setOrder] = useState<\n ComputedAlgoOrder & {\n ignoreValidate?: boolean;\n }\n >({\n algo_order_id: options?.defaultOrder?.algo_order_id,\n symbol: position.symbol as string,\n side: Number(position.position_qty) > 0 ? OrderSide.BUY : OrderSide.SELL,\n quantity:\n options?.defaultOrder?.quantity || Math.abs(position.position_qty),\n algo_type: options?.defaultOrder?.algo_type as AlgoOrderRootType,\n });\n\n const symbolInfo = useSymbolsInfo()[position.symbol!]();\n const { data: markPrice } = useMarkPrice(order.symbol!);\n\n const [doCreateOrder] = useMutation(\"/v1/algo/order\");\n const [doUpdateOrder] = useMutation(\"/v1/algo/order\", \"PUT\");\n const [doDeleteOrder] = useMutation(\"/v1/algo/order\", \"DELETE\");\n\n const [errors, setErrors] = useState<ValidateError | null>(null);\n\n useEffect(() => {\n if (!options?.defaultOrder) return;\n const trigger_prices = findTPSLFromOrder(options.defaultOrder!);\n if (trigger_prices.tp_trigger_price) {\n setOrderValue(\"tp_trigger_price\", trigger_prices.tp_trigger_price, {\n ignoreValidate: true,\n });\n }\n if (trigger_prices.sl_trigger_price) {\n setOrderValue(\"sl_trigger_price\", trigger_prices.sl_trigger_price, {\n ignoreValidate: true,\n });\n }\n }, []);\n\n const _setOrderValue = (\n key: string,\n value: number | string,\n options?: {\n ignoreValidate?: boolean;\n }\n ) => {\n console.log(\"[updateOrder:]\", key, value, order.quantity);\n\n setOrder((prev) => {\n const side = position.position_qty! > 0 ? OrderSide.BUY : OrderSide.SELL;\n\n if (key === \"sl_pnl\") {\n value = value ? `-${value}` : \"\";\n }\n\n const newValue = calculateHelper(\n key,\n {\n key,\n value,\n entryPrice: position.average_open_price!,\n qty:\n side === OrderSide.BUY\n ? Number(prev.quantity)!\n : -Number(prev.quantity)!,\n orderSide: side,\n },\n {\n symbol: symbolInfo,\n }\n );\n\n console.log(\"newValue::\", newValue);\n\n return {\n ...prev,\n ...newValue,\n ignoreValidate: options?.ignoreValidate,\n };\n });\n };\n\n const setOrderValue = async (\n key: string,\n value: number | string,\n options?: {\n ignoreValidate?: boolean;\n }\n ) => {\n if (key === \"quantity\") {\n setOrder((prev) => ({ ...prev, quantity: value }));\n\n if (typeof order.sl_trigger_price !== \"undefined\") {\n _setOrderValue(\"sl_trigger_price\", order.sl_trigger_price, {\n ignoreValidate: true,\n });\n }\n\n if (typeof order.tp_trigger_price !== \"undefined\") {\n _setOrderValue(\"tp_trigger_price\", order.tp_trigger_price, {\n ignoreValidate: true,\n });\n }\n\n return;\n }\n\n _setOrderValue(key, value, options);\n };\n\n /**\n * calculate value config\n */\n const valueConfig = {\n symbol: symbolInfo,\n maxQty: Math.abs(position.position_qty),\n markPrice,\n };\n\n // auto validate when order changed\n useEffect(() => {\n requestAnimationFrame(() => {\n if (order.ignoreValidate) return;\n const orderCreator = getOrderCreator();\n orderCreator\n .validate(order as AlgoOrderEntity, valueConfig)\n .then((errors) => {\n setErrors(errors);\n });\n });\n }, [order, valueConfig.markPrice, order.quantity]);\n\n const setValues = (values: Partial<ComputedAlgoOrder>) => {\n const keys = Object.keys(values);\n keys.forEach((key) => {\n setOrderValue(\n key as UpdateOrderKey,\n values[key as keyof ComputedAlgoOrder] as number | string\n );\n });\n };\n\n const validate = (): Promise<\n AlgoOrderEntity<\n AlgoOrderRootType.POSITIONAL_TP_SL | AlgoOrderRootType.TP_SL\n >\n > => {\n const orderCreator = getOrderCreator();\n\n return new Promise((resolve, reject) => {\n return orderCreator\n .validate(\n order as AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n valueConfig\n )\n .then((errors) => {\n console.log(\"errors::\", errors);\n\n if (errors) {\n setErrors(errors);\n return reject(errors);\n }\n\n resolve(\n orderCreator.create(\n order as AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n valueConfig\n )\n );\n });\n });\n };\n\n useEffect(() => {\n // setError(validate());\n }, [order]);\n\n const compare = (): boolean => {\n const quantityNum = Number(order.quantity);\n if (isNaN(quantityNum)) return false;\n return quantityNum === Math.abs(Number(position.position_qty));\n };\n\n const getOrderCreator = () => {\n // if the order is existed, and the order type is POSITIONAL_TP_SL, always return POSITIONAL_TP_SL\n // else use qty to determine the order type\n if (options?.defaultOrder?.algo_type === AlgoOrderRootType.TP_SL) {\n return OrderFactory.create(AlgoOrderRootType.TP_SL);\n }\n return OrderFactory.create(\n compare() ? AlgoOrderRootType.POSITIONAL_TP_SL : AlgoOrderRootType.TP_SL\n );\n };\n\n const submit = async () => {\n const defaultOrder = options?.defaultOrder;\n const orderId = defaultOrder?.algo_order_id;\n const algoType = defaultOrder?.algo_type;\n\n // if algo_order_id is not existed, create new order\n if (!orderId) {\n return createOrder();\n }\n\n // if algo_order_id is existed and algoType = POSITION_TP_SL\n if (algoType === AlgoOrderRootType.POSITIONAL_TP_SL) {\n // if order.qty = position.qty, update order\n if (compare()) {\n return updateOrder(orderId!);\n }\n // if order.qty != position.qty, create new tp/sl order\n return createOrder();\n }\n\n // if algo_order_id is existed and algoType = TP_SL, delete order and create new order\n\n return updateOrder(orderId!);\n };\n\n const createOrder = () => {\n const orderCreator = getOrderCreator();\n\n const orderBody = orderCreator.create(\n order as AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n valueConfig\n );\n\n if (orderBody.child_orders.length === 0) {\n throw new SDKError(\"No child orders\");\n }\n\n return doCreateOrder(orderBody);\n };\n\n const deleteOrder = (orderId: number, symbol: string): Promise<any> => {\n return doDeleteOrder(null, {\n order_id: orderId,\n symbol,\n });\n };\n\n const updateOrder = (orderId: number): Promise<any> => {\n const orderCreator = getOrderCreator() as TPSLPositionOrderCreator;\n\n const [updatedOrderEntity, orderEntity] = orderCreator.crateUpdateOrder(\n // @ts-ignore\n order,\n options?.defaultOrder,\n valueConfig\n );\n\n if (updatedOrderEntity.child_orders.length === 0) {\n return Promise.resolve(\"Not any order needs to update\");\n }\n\n const needDelete =\n orderEntity.child_orders.filter(\n (order) =>\n typeof order.is_activated === \"boolean\" && !order.is_activated\n ).length === 2;\n\n if (needDelete) {\n return deleteOrder(orderId, order.symbol!);\n }\n\n return doUpdateOrder({\n order_id: orderId,\n ...updatedOrderEntity,\n });\n };\n\n return [\n omit([\"ignoreValidate\"], order) as ComputedAlgoOrder,\n {\n submit,\n\n create: submit,\n\n update: updateOrder,\n setValue: setOrderValue,\n setValues,\n // createPositionTPSL: submit,\n // createTPSL: submit,\n validate,\n errors,\n },\n ];\n};\n"],"names":["useTaskProfitAndStopLossInternal","position","options","order","setOrder","useState","algo_order_id","defaultOrder","symbol","side","Number","position_qty","OrderSide","BUY","SELL","quantity","Math","abs","algo_type","symbolInfo","useSymbolsInfo","data","markPrice","useMarkPrice","doCreateOrder","useMutation","doUpdateOrder","doDeleteOrder","errors","setErrors","useEffect","trigger_prices","findTPSLFromOrder","tp_trigger_price","setOrderValue","ignoreValidate","sl_trigger_price","_setOrderValue","key","value","prev","newValue","calculateHelper","entryPrice","average_open_price","qty","orderSide","valueConfig","maxQty","requestAnimationFrame","orderCreator","getOrderCreator","validate","then","setValues","values","keys","Object","forEach","Promise","resolve","reject","create","compare","quantityNum","isNaN","AlgoOrderRootType","TP_SL","OrderFactory","POSITIONAL_TP_SL","submit","orderId","algoType","createOrder","updateOrder","orderBody","child_orders","length","SDKError","deleteOrder","order_id","updatedOrderEntity","orderEntity","crateUpdateOrder","needDelete","filter","is_activated","omit","update","setValue"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;+BAgDaA;;;eAAAA;;;uBAhDuB;uBAO7B;uBACyC;6BACpB;yBACC;wBAGK;gCACH;8BACF;uBACR;AAgCd,MAAMA,mCAAmC,CAC9CC,UAEAC;IA6BA,MAAM,CAACC,OAAOC,SAAS,GAAGC,IAAAA,eAAQ,EAIhC;QACAC,eAAeJ,SAASK,cAAcD;QACtCE,QAAQP,SAASO,MAAM;QACvBC,MAAMC,OAAOT,SAASU,YAAY,IAAI,IAAIC,gBAAS,CAACC,GAAG,GAAGD,gBAAS,CAACE,IAAI;QACxEC,UACEb,SAASK,cAAcQ,YAAYC,KAAKC,GAAG,CAAChB,SAASU,YAAY;QACnEO,WAAWhB,SAASK,cAAcW;IACpC;IAEA,MAAMC,aAAaC,IAAAA,8BAAc,GAAE,CAACnB,SAASO,MAAM,CAAE;IACrD,MAAM,EAAEa,MAAMC,SAAS,EAAE,GAAGC,IAAAA,0BAAY,EAACpB,MAAMK,MAAM;IAErD,MAAM,CAACgB,cAAc,GAAGC,IAAAA,wBAAW,EAAC;IACpC,MAAM,CAACC,cAAc,GAAGD,IAAAA,wBAAW,EAAC,kBAAkB;IACtD,MAAM,CAACE,cAAc,GAAGF,IAAAA,wBAAW,EAAC,kBAAkB;IAEtD,MAAM,CAACG,QAAQC,UAAU,GAAGxB,IAAAA,eAAQ,EAAuB;IAE3DyB,IAAAA,gBAAS,EAAC;QACR,IAAI,CAAC5B,SAASK,cAAc;QAC5B,MAAMwB,iBAAiBC,IAAAA,yBAAiB,EAAC9B,QAAQK,YAAY;QAC7D,IAAIwB,eAAeE,gBAAgB,EAAE;YACnCC,cAAc,oBAAoBH,eAAeE,gBAAgB,EAAE;gBACjEE,gBAAgB;YAClB;QACF;QACA,IAAIJ,eAAeK,gBAAgB,EAAE;YACnCF,cAAc,oBAAoBH,eAAeK,gBAAgB,EAAE;gBACjED,gBAAgB;YAClB;QACF;IACF,GAAG,EAAE;IAEL,MAAME,iBAAiB,CACrBC,KACAC,OACArC;;QAMAE,SAAS,CAACoC;YACR,MAAM/B,OAAOR,SAASU,YAAY,GAAI,IAAIC,gBAAS,CAACC,GAAG,GAAGD,gBAAS,CAACE,IAAI;YAExE,IAAIwB,QAAQ,UAAU;gBACpBC,QAAQA,QAAQ,CAAC,CAAC,EAAEA,MAAM,CAAC,GAAG;YAChC;YAEA,MAAME,WAAWC,IAAAA,sBAAe,EAC9BJ,KACA;gBACEA;gBACAC;gBACAI,YAAY1C,SAAS2C,kBAAkB;gBACvCC,KACEpC,SAASG,gBAAS,CAACC,GAAG,GAClBH,OAAO8B,KAAKzB,QAAQ,IACpB,CAACL,OAAO8B,KAAKzB,QAAQ;gBAC3B+B,WAAWrC;YACb,GACA;gBACED,QAAQW;YACV;;YAKF,OAAO;gBACL,GAAGqB,IAAI;gBACP,GAAGC,QAAQ;gBACXN,gBAAgBjC,SAASiC;YAC3B;QACF;IACF;IAEA,MAAMD,gBAAgB,OACpBI,KACAC,OACArC;QAIA,IAAIoC,QAAQ,YAAY;YACtBlC,SAAS,CAACoC,OAAU,CAAA;oBAAE,GAAGA,IAAI;oBAAEzB,UAAUwB;gBAAM,CAAA;YAE/C,IAAI,OAAOpC,MAAMiC,gBAAgB,KAAK,aAAa;gBACjDC,eAAe,oBAAoBlC,MAAMiC,gBAAgB,EAAE;oBACzDD,gBAAgB;gBAClB;YACF;YAEA,IAAI,OAAOhC,MAAM8B,gBAAgB,KAAK,aAAa;gBACjDI,eAAe,oBAAoBlC,MAAM8B,gBAAgB,EAAE;oBACzDE,gBAAgB;gBAClB;YACF;YAEA;QACF;QAEAE,eAAeC,KAAKC,OAAOrC;IAC7B;IAEA;;GAEC,GACD,MAAM6C,cAAc;QAClBvC,QAAQW;QACR6B,QAAQhC,KAAKC,GAAG,CAAChB,SAASU,YAAY;QACtCW;IACF;IAEA,mCAAmC;IACnCQ,IAAAA,gBAAS,EAAC;QACRmB,sBAAsB;YACpB,IAAI9C,MAAMgC,cAAc,EAAE;YAC1B,MAAMe,eAAeC;YACrBD,aACGE,QAAQ,CAACjD,OAA0B4C,aACnCM,IAAI,CAAC,CAACzB;gBACLC,UAAUD;YACZ;QACJ;IACF,GAAG;QAACzB;QAAO4C,YAAYzB,SAAS;QAAEnB,MAAMY,QAAQ;KAAC;IAEjD,MAAMuC,YAAY,CAACC;QACjB,MAAMC,OAAOC,OAAOD,IAAI,CAACD;QACzBC,KAAKE,OAAO,CAAC,CAACpB;YACZJ,cACEI,KACAiB,MAAM,CAACjB,IAA+B;QAE1C;IACF;IAEA,MAAMc,WAAW;QAKf,MAAMF,eAAeC;QAErB,OAAO,IAAIQ,QAAQ,CAACC,SAASC;YAC3B,OAAOX,aACJE,QAAQ,CACPjD,OACA4C,aAEDM,IAAI,CAAC,CAACzB;;gBAGL,IAAIA,QAAQ;oBACVC,UAAUD;oBACV,OAAOiC,OAAOjC;gBAChB;gBAEAgC,QACEV,aAAaY,MAAM,CACjB3D,OACA4C;YAGN;QACJ;IACF;IAEAjB,IAAAA,gBAAS,EAAC;IACR,wBAAwB;IAC1B,GAAG;QAAC3B;KAAM;IAEV,MAAM4D,UAAU;QACd,MAAMC,cAActD,OAAOP,MAAMY,QAAQ;QACzC,IAAIkD,MAAMD,cAAc,OAAO;QAC/B,OAAOA,gBAAgBhD,KAAKC,GAAG,CAACP,OAAOT,SAASU,YAAY;IAC9D;IAEA,MAAMwC,kBAAkB;QACtB,kGAAkG;QAClG,2CAA2C;QAC3C,IAAIjD,SAASK,cAAcW,cAAcgD,wBAAiB,CAACC,KAAK,EAAE;YAChE,OAAOC,qBAAY,CAACN,MAAM,CAACI,wBAAiB,CAACC,KAAK;QACpD;QACA,OAAOC,qBAAY,CAACN,MAAM,CACxBC,YAAYG,wBAAiB,CAACG,gBAAgB,GAAGH,wBAAiB,CAACC,KAAK;IAE5E;IAEA,MAAMG,SAAS;QACb,MAAM/D,eAAeL,SAASK;QAC9B,MAAMgE,UAAUhE,cAAcD;QAC9B,MAAMkE,WAAWjE,cAAcW;QAE/B,oDAAoD;QACpD,IAAI,CAACqD,SAAS;YACZ,OAAOE;QACT;QAEA,4DAA4D;QAC5D,IAAID,aAAaN,wBAAiB,CAACG,gBAAgB,EAAE;YACnD,4CAA4C;YAC5C,IAAIN,WAAW;gBACb,OAAOW,YAAYH;YACrB;YACA,uDAAuD;YACvD,OAAOE;QACT;QAEA,sFAAsF;QAEtF,OAAOC,YAAYH;IACrB;IAEA,MAAME,cAAc;QAClB,MAAMvB,eAAeC;QAErB,MAAMwB,YAAYzB,aAAaY,MAAM,CACnC3D,OACA4C;QAGF,IAAI4B,UAAUC,YAAY,CAACC,MAAM,KAAK,GAAG;YACvC,MAAM,IAAIC,eAAQ,CAAC;QACrB;QAEA,OAAOtD,cAAcmD;IACvB;IAEA,MAAMI,cAAc,CAACR,SAAiB/D;QACpC,OAAOmB,cAAc,MAAM;YACzBqD,UAAUT;YACV/D;QACF;IACF;IAEA,MAAMkE,cAAc,CAACH;QACnB,MAAMrB,eAAeC;QAErB,MAAM,CAAC8B,oBAAoBC,YAAY,GAAGhC,aAAaiC,gBAAgB,CACrE,aAAa;QACbhF,OACAD,SAASK,cACTwC;QAGF,IAAIkC,mBAAmBL,YAAY,CAACC,MAAM,KAAK,GAAG;YAChD,OAAOlB,QAAQC,OAAO,CAAC;QACzB;QAEA,MAAMwB,aACJF,YAAYN,YAAY,CAACS,MAAM,CAC7B,CAAClF,QACC,OAAOA,MAAMmF,YAAY,KAAK,aAAa,CAACnF,MAAMmF,YAAY,EAChET,MAAM,KAAK;QAEf,IAAIO,YAAY;YACd,OAAOL,YAAYR,SAASpE,MAAMK,MAAM;QAC1C;QAEA,OAAOkB,cAAc;YACnBsD,UAAUT;YACV,GAAGU,kBAAkB;QACvB;IACF;IAEA,OAAO;QACLM,IAAAA,WAAI,EAAC;YAAC;SAAiB,EAAEpF;QACzB;YACEmE;YAEAR,QAAQQ;YAERkB,QAAQd;YACRe,UAAUvD;YACVoB;YACA,8BAA8B;YAC9B,sBAAsB;YACtBF;YACAxB;QACF;KACD;AACH"}
1
+ {"version":3,"sources":["../../../src/orderly/useTakeProfitAndStopLoss/useTPSL.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\nimport {\n API,\n AlgoOrderEntity,\n OrderSide,\n SDKError,\n} from \"@orderly.network/types\";\nimport { UpdateOrderKey, calculateHelper } from \"./utils\";\nimport { useMutation } from \"../../useMutation\";\nimport { OrderFactory } from \"../../services/orderCreator/factory\";\nimport { AlgoOrderRootType } from \"@orderly.network/types\";\nimport { TPSLPositionOrderCreator } from \"../../services/orderCreator/tpslPositionOrderCreator\";\nimport { findTPSLFromOrder } from \"../usePositionStream/utils\";\nimport { useSymbolsInfo } from \"../useSymbolsInfo\";\nimport { useMarkPrice } from \"../useMarkPrice\";\nimport { omit } from \"ramda\";\n\nexport type ComputedAlgoOrder = Partial<\n AlgoOrderEntity<\n AlgoOrderRootType.TP_SL & {\n /**\n * Computed take profit\n */\n tp_pnl: number;\n tp_offset: number;\n tp_offset_percentage: number;\n\n /**\n * Computed stop loss\n */\n sl_pnl: number;\n sl_offset: number;\n sl_offset_percentage: number;\n }\n >\n>;\n\nexport type ValidateError = {\n [P in keyof ComputedAlgoOrder]?: {\n type: string;\n message: string;\n };\n};\n\n/**\n * @hidden\n */\nexport const useTaskProfitAndStopLossInternal = (\n position: Partial<API.PositionTPSLExt> &\n Pick<API.PositionTPSLExt, \"symbol\" | \"average_open_price\" | \"position_qty\">,\n options?: {\n defaultOrder?: API.AlgoOrder;\n }\n): [\n /**\n * return the computed & formatted order\n */\n ComputedAlgoOrder,\n {\n /**\n * Update the take profit and stop loss order, this will merge the new data with the old one\n */\n setValue: (key: string, value: number | string) => void;\n setValues: (values: Partial<ComputedAlgoOrder>) => void;\n // getOrderEntity: () => AlgoOrderEntity<AlgoOrderRootType.TP_SL|AlgoOrderRootType.POSITIONAL_TP_SL>;\n /**\n * Submit the TP/SL order\n */\n submit: () => Promise<void>;\n // /**\n // * Create the take profit and stop loss order, auto-detect the order type\n // */\n // create: () => Promise<void>;\n // update: (orderId: number) => Promise<any>;\n errors: ValidateError | null;\n /**\n *\n */\n validate: () => Promise<\n AlgoOrderEntity<\n AlgoOrderRootType.POSITIONAL_TP_SL | AlgoOrderRootType.TP_SL\n >\n >;\n }\n] => {\n const [order, setOrder] = useState<\n ComputedAlgoOrder & {\n ignoreValidate?: boolean;\n }\n >({\n algo_order_id: options?.defaultOrder?.algo_order_id,\n symbol: position.symbol as string,\n side: Number(position.position_qty) > 0 ? OrderSide.BUY : OrderSide.SELL,\n quantity:\n options?.defaultOrder?.quantity || Math.abs(position.position_qty),\n algo_type: options?.defaultOrder?.algo_type as AlgoOrderRootType,\n });\n\n const symbolInfo = useSymbolsInfo()[position.symbol!]();\n const { data: markPrice } = useMarkPrice(order.symbol!);\n\n const [doCreateOrder] = useMutation(\"/v1/algo/order\");\n const [doUpdateOrder] = useMutation(\"/v1/algo/order\", \"PUT\");\n const [doDeleteOrder] = useMutation(\"/v1/algo/order\", \"DELETE\");\n\n const [errors, setErrors] = useState<ValidateError | null>(null);\n\n useEffect(() => {\n if (!options?.defaultOrder) return;\n const trigger_prices = findTPSLFromOrder(options.defaultOrder!);\n if (trigger_prices.tp_trigger_price) {\n setOrderValue(\"tp_trigger_price\", trigger_prices.tp_trigger_price, {\n ignoreValidate: true,\n });\n }\n if (trigger_prices.sl_trigger_price) {\n setOrderValue(\"sl_trigger_price\", trigger_prices.sl_trigger_price, {\n ignoreValidate: true,\n });\n }\n }, []);\n\n const _setOrderValue = (\n key: string,\n value: number | string,\n options?: {\n ignoreValidate?: boolean;\n }\n ) => {\n // console.log(\"[updateOrder:]\", key, value, order.quantity);\n\n setOrder((prev) => {\n const side = position.position_qty! > 0 ? OrderSide.BUY : OrderSide.SELL;\n\n if (key === \"sl_pnl\") {\n value = value ? `-${value}` : \"\";\n }\n\n const newValue = calculateHelper(\n key,\n {\n key,\n value,\n entryPrice: position.average_open_price!,\n qty:\n side === OrderSide.BUY\n ? Number(prev.quantity)!\n : -Number(prev.quantity)!,\n orderSide: side,\n },\n {\n symbol: symbolInfo,\n }\n );\n\n return {\n ...prev,\n ...newValue,\n ignoreValidate: options?.ignoreValidate,\n };\n });\n };\n\n const setOrderValue = async (\n key: string,\n value: number | string,\n options?: {\n ignoreValidate?: boolean;\n }\n ) => {\n if (key === \"quantity\") {\n setOrder((prev) => ({ ...prev, quantity: value }));\n\n if (typeof order.sl_trigger_price !== \"undefined\") {\n _setOrderValue(\"sl_trigger_price\", order.sl_trigger_price, {\n ignoreValidate: true,\n });\n }\n\n if (typeof order.tp_trigger_price !== \"undefined\") {\n _setOrderValue(\"tp_trigger_price\", order.tp_trigger_price, {\n ignoreValidate: true,\n });\n }\n\n return;\n }\n\n _setOrderValue(key, value, options);\n };\n\n /**\n * calculate value config\n */\n const valueConfig = {\n symbol: symbolInfo,\n maxQty: Math.abs(position.position_qty),\n markPrice,\n };\n\n // auto validate when order changed\n useEffect(() => {\n requestAnimationFrame(() => {\n if (order.ignoreValidate) return;\n const orderCreator = getOrderCreator();\n orderCreator\n .validate(order as AlgoOrderEntity, valueConfig)\n .then((errors) => {\n setErrors(errors);\n });\n });\n }, [order, valueConfig.markPrice, order.quantity]);\n\n const setValues = (values: Partial<ComputedAlgoOrder>) => {\n const keys = Object.keys(values);\n keys.forEach((key) => {\n setOrderValue(\n key as UpdateOrderKey,\n values[key as keyof ComputedAlgoOrder] as number | string\n );\n });\n };\n\n const validate = (): Promise<\n AlgoOrderEntity<\n AlgoOrderRootType.POSITIONAL_TP_SL | AlgoOrderRootType.TP_SL\n >\n > => {\n const orderCreator = getOrderCreator();\n\n return new Promise((resolve, reject) => {\n return orderCreator\n .validate(\n order as AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n valueConfig\n )\n .then((errors) => {\n console.log(\"errors::\", errors);\n\n if (errors) {\n setErrors(errors);\n return reject(errors);\n }\n\n resolve(\n orderCreator.create(\n order as AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n valueConfig\n )\n );\n });\n });\n };\n\n // useEffect(() => {\n // // setError(validate());\n // }, [order]);\n\n const compare = (): boolean => {\n const quantityNum = Number(order.quantity);\n if (isNaN(quantityNum)) return false;\n return quantityNum === Math.abs(Number(position.position_qty));\n };\n\n const getOrderCreator = () => {\n // if the order is existed, and the order type is POSITIONAL_TP_SL, always return POSITIONAL_TP_SL\n // else use qty to determine the order type\n if (options?.defaultOrder?.algo_type === AlgoOrderRootType.TP_SL) {\n return OrderFactory.create(AlgoOrderRootType.TP_SL);\n }\n return OrderFactory.create(\n compare() ? AlgoOrderRootType.POSITIONAL_TP_SL : AlgoOrderRootType.TP_SL\n );\n };\n\n const submit = async () => {\n const defaultOrder = options?.defaultOrder;\n const orderId = defaultOrder?.algo_order_id;\n const algoType = defaultOrder?.algo_type;\n\n // if algo_order_id is not existed, create new order\n if (!orderId) {\n return createOrder();\n }\n\n // if algo_order_id is existed and algoType = POSITION_TP_SL\n if (algoType === AlgoOrderRootType.POSITIONAL_TP_SL) {\n // if order.qty = position.qty, update order\n if (compare()) {\n return updateOrder(orderId!);\n }\n // if order.qty != position.qty, create new tp/sl order\n return createOrder();\n }\n\n // if algo_order_id is existed and algoType = TP_SL, delete order and create new order\n\n return updateOrder(orderId!);\n };\n\n const createOrder = () => {\n const orderCreator = getOrderCreator();\n\n const orderBody = orderCreator.create(\n order as AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n valueConfig\n );\n\n if (orderBody.child_orders.length === 0) {\n throw new SDKError(\"No child orders\");\n }\n\n // filter the order that is not activated\n orderBody.child_orders = orderBody.child_orders.filter(\n (order: API.AlgoOrderExt) => order.is_activated\n );\n\n return doCreateOrder(orderBody);\n };\n\n const deleteOrder = (orderId: number, symbol: string): Promise<any> => {\n return doDeleteOrder(null, {\n order_id: orderId,\n symbol,\n });\n };\n\n const updateOrder = (orderId: number): Promise<any> => {\n const orderCreator = getOrderCreator() as TPSLPositionOrderCreator;\n\n const [updatedOrderEntity, orderEntity] = orderCreator.crateUpdateOrder(\n // @ts-ignore\n order,\n options?.defaultOrder,\n valueConfig\n );\n\n if (updatedOrderEntity.child_orders.length === 0) {\n return Promise.resolve(\"Not any order needs to update\");\n }\n\n const needDelete =\n orderEntity.child_orders.filter(\n (order) =>\n typeof order.is_activated === \"boolean\" && !order.is_activated\n ).length === orderEntity.child_orders.length;\n\n if (needDelete) {\n return deleteOrder(orderId, order.symbol!);\n }\n\n return doUpdateOrder({\n order_id: orderId,\n ...updatedOrderEntity,\n });\n };\n\n return [\n omit([\"ignoreValidate\"], order) as ComputedAlgoOrder,\n {\n submit,\n\n // create: submit,\n\n // update: updateOrder,/\n setValue: setOrderValue,\n setValues,\n // createPositionTPSL: submit,\n // createTPSL: submit,\n validate,\n errors,\n },\n ];\n};\n"],"names":["useTaskProfitAndStopLossInternal","position","options","order","setOrder","useState","algo_order_id","defaultOrder","symbol","side","Number","position_qty","OrderSide","BUY","SELL","quantity","Math","abs","algo_type","symbolInfo","useSymbolsInfo","data","markPrice","useMarkPrice","doCreateOrder","useMutation","doUpdateOrder","doDeleteOrder","errors","setErrors","useEffect","trigger_prices","findTPSLFromOrder","tp_trigger_price","setOrderValue","ignoreValidate","sl_trigger_price","_setOrderValue","key","value","prev","newValue","calculateHelper","entryPrice","average_open_price","qty","orderSide","valueConfig","maxQty","requestAnimationFrame","orderCreator","getOrderCreator","validate","then","setValues","values","keys","Object","forEach","Promise","resolve","reject","create","compare","quantityNum","isNaN","AlgoOrderRootType","TP_SL","OrderFactory","POSITIONAL_TP_SL","submit","orderId","algoType","createOrder","updateOrder","orderBody","child_orders","length","SDKError","filter","is_activated","deleteOrder","order_id","updatedOrderEntity","orderEntity","crateUpdateOrder","needDelete","omit","setValue"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/orderly/useTakeProfitAndStopLoss/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAgB,MAAM,wBAAwB,CAAC;AAEtE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD,MAAM,MAAM,cAAc,GACtB,kBAAkB,GAClB,sBAAsB,GACtB,QAAQ,GACR,WAAW,GACX,UAAU,GACV,kBAAkB,GAClB,sBAAsB,GACtB,QAAQ,GACR,WAAW,CAAC;AAEhB;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;CAC1B,sBAoBA;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE;IACN,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;CAC1B,EACD,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,GAAG,CAAC,SAAS,CAAA;CAAO,UA2BzC;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;CAC1B,sBAgCA;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;CAC1B,sBAyBA;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;CAC1B,sBA+BA;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE;IACN,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;CAC1B,EACD,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,GAAG,CAAC,SAAS,CAAA;CAAO,GACvC,MAAM,CAkCR;AAED,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE;IACN,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,SAAS,CAAC;CACtB,EACD,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,GAAG,CAAC,SAAS,CAAA;CAAO;;EAgJzC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/orderly/useTakeProfitAndStopLoss/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAgB,MAAM,wBAAwB,CAAC;AAEtE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD,MAAM,MAAM,cAAc,GACtB,kBAAkB,GAClB,sBAAsB,GACtB,QAAQ,GACR,WAAW,GACX,UAAU,GACV,kBAAkB,GAClB,sBAAsB,GACtB,QAAQ,GACR,WAAW,CAAC;AAEhB;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;CAC1B,sBAoBA;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE;IACN,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;CAC1B,EACD,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,GAAG,CAAC,SAAS,CAAA;CAAO,UA2BzC;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;CAC1B,sBAgCA;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;CAC1B,sBAyBA;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;CAC1B,sBA+BA;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE;IACN,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;CAC1B,EACD,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,GAAG,CAAC,SAAS,CAAA;CAAO,GACvC,MAAM,CAkCR;AAeD,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE;IACN,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,SAAS,CAAC;CACtB,EACD,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,GAAG,CAAC,SAAS,CAAA;CAAO;;EAuJzC"}
@@ -66,7 +66,7 @@ function priceToOffset(inputs, options = {}) {
66
66
  decimal = new _utils.Decimal(entryPrice).minus(new _utils.Decimal(price));
67
67
  }
68
68
  if (symbol) {
69
- return decimal.abs().todp(symbol.quote_dp, 4).toNumber();
69
+ return decimal.abs().todp(symbol.quote_dp, _utils.Decimal.ROUND_UP).toNumber();
70
70
  }
71
71
  return decimal.abs().toNumber();
72
72
  }
@@ -103,7 +103,7 @@ function priceToOffsetPercentage(inputs) {
103
103
  }
104
104
  function pnlToPrice(inputs) {
105
105
  const { qty, pnl, entryPrice, orderType, orderSide } = inputs;
106
- ;
106
+ // console.log("pnlToPrice", inputs);
107
107
  if (!pnl) {
108
108
  return;
109
109
  }
@@ -137,7 +137,7 @@ function priceToPnl(inputs, options = {}) {
137
137
  decimal = new _utils.Decimal(qty).mul(new _utils.Decimal(price).minus(new _utils.Decimal(entryPrice)));
138
138
  }
139
139
  if (symbol) {
140
- return decimal.todp(symbol.quote_dp, 4).toNumber();
140
+ return decimal.todp(symbol.quote_dp, _utils.Decimal.ROUND_DOWN).toNumber();
141
141
  }
142
142
  return decimal.toNumber();
143
143
  }
@@ -160,6 +160,8 @@ function calculateHelper(key, inputs, options = {}) {
160
160
  [key]: inputs.value
161
161
  };
162
162
  let trigger_price, offset, offset_percentage, pnl;
163
+ const entryPrice = new _utils.Decimal(inputs.entryPrice).todp(options.symbol?.quote_dp ?? 2, _utils.Decimal.ROUND_UP).toNumber();
164
+ // console.log("******* entryPrice", options.symbol?.quote_dp, entryPrice);
163
165
  switch(key){
164
166
  case "tp_trigger_price":
165
167
  case "sl_trigger_price":
@@ -183,7 +185,7 @@ function calculateHelper(key, inputs, options = {}) {
183
185
  trigger_price = pnlToPrice({
184
186
  qty,
185
187
  pnl: Number(inputs.value),
186
- entryPrice: inputs.entryPrice,
188
+ entryPrice,
187
189
  orderSide: inputs.orderSide,
188
190
  orderType
189
191
  });
@@ -196,7 +198,7 @@ function calculateHelper(key, inputs, options = {}) {
196
198
  trigger_price = offsetToPrice({
197
199
  qty,
198
200
  offset: Number(inputs.value),
199
- entryPrice: inputs.entryPrice,
201
+ entryPrice,
200
202
  orderSide: inputs.orderSide,
201
203
  orderType: key === "tp_offset" ? _types.AlgoOrderType.TAKE_PROFIT : _types.AlgoOrderType.STOP_LOSS
202
204
  });
@@ -209,7 +211,7 @@ function calculateHelper(key, inputs, options = {}) {
209
211
  trigger_price = offsetPercentageToPrice({
210
212
  qty,
211
213
  percentage: Number(inputs.value),
212
- entryPrice: inputs.entryPrice,
214
+ entryPrice,
213
215
  orderSide: inputs.orderSide,
214
216
  orderType
215
217
  });
@@ -224,25 +226,25 @@ function calculateHelper(key, inputs, options = {}) {
224
226
  [key]: inputs.value
225
227
  };
226
228
  return {
227
- [`${keyPrefix}trigger_price`]: symbol ? new _utils.Decimal(Number(trigger_price)).todp(symbol.quote_dp, 4).toNumber() : trigger_price,
229
+ [`${keyPrefix}trigger_price`]: (0, _utils.todpIfNeed)(trigger_price, symbol?.quote_dp ?? 2),
228
230
  [`${keyPrefix}offset`]: offset ?? priceToOffset({
229
231
  qty,
230
232
  price: Number(trigger_price),
231
- entryPrice: inputs.entryPrice,
233
+ entryPrice,
232
234
  orderSide: inputs.orderSide,
233
235
  orderType
234
236
  }, options),
235
237
  [`${keyPrefix}offset_percentage`]: offset_percentage ?? priceToOffsetPercentage({
236
238
  qty,
237
239
  price: Number(trigger_price),
238
- entryPrice: inputs.entryPrice,
240
+ entryPrice,
239
241
  orderSide: inputs.orderSide,
240
242
  orderType
241
243
  }),
242
244
  [`${keyPrefix}pnl`]: pnl ?? priceToPnl({
243
245
  qty,
244
246
  price: Number(trigger_price),
245
- entryPrice: inputs.entryPrice,
247
+ entryPrice,
246
248
  orderSide: inputs.orderSide,
247
249
  orderType
248
250
  }, options)
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/orderly/useTakeProfitAndStopLoss/utils.ts"],"sourcesContent":["import { API, OrderSide, PositionSide } from \"@orderly.network/types\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { AlgoOrderType } from \"@orderly.network/types\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\n\nexport type UpdateOrderKey =\n | \"tp_trigger_price\"\n | \"tp_offset_percentage\"\n | \"tp_pnl\"\n | \"tp_offset\"\n | \"quantity\"\n | \"sl_trigger_price\"\n | \"sl_offset_percentage\"\n | \"sl_pnl\"\n | \"sl_offset\";\n\n/**\n * offset -> TP/SL price\n */\nexport function offsetToPrice(inputs: {\n qty: number;\n offset: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n}) {\n const { qty, offset, entryPrice, orderType, orderSide } = inputs;\n\n if (!offset) return;\n\n if (orderSide === OrderSide.BUY) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(entryPrice).add(new Decimal(offset)).toNumber();\n }\n\n return new Decimal(entryPrice).minus(new Decimal(offset)).toNumber();\n }\n\n if (orderSide === OrderSide.SELL) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(entryPrice).minus(new Decimal(offset)).toNumber();\n }\n\n return new Decimal(entryPrice).add(new Decimal(offset)).toNumber();\n }\n}\n\nexport function priceToOffset(\n inputs: {\n qty: number;\n price: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n },\n options: { symbol?: API.SymbolExt } = {}\n) {\n const { qty, price, entryPrice, orderType, orderSide } = inputs;\n const { symbol } = options;\n let decimal: Decimal;\n\n if (orderSide === OrderSide.BUY) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n decimal = new Decimal(price).minus(new Decimal(entryPrice));\n }\n\n decimal = new Decimal(price).minus(new Decimal(entryPrice));\n }\n\n if (orderSide === OrderSide.SELL) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n decimal = new Decimal(price).minus(new Decimal(entryPrice));\n }\n\n decimal = new Decimal(entryPrice).minus(new Decimal(price));\n }\n\n if (symbol) {\n return decimal!.abs().todp(symbol.quote_dp, 4).toNumber();\n }\n\n return decimal!.abs().toNumber();\n}\n\nexport function offsetPercentageToPrice(inputs: {\n qty: number;\n percentage: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n}) {\n const { qty, percentage, entryPrice, orderType, orderSide } = inputs;\n\n if (!percentage) return;\n\n if (orderSide === OrderSide.BUY) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(1)\n .add(new Decimal(percentage))\n .mul(new Decimal(entryPrice))\n .toNumber();\n }\n\n return new Decimal(1)\n .minus(new Decimal(percentage))\n .mul(new Decimal(entryPrice))\n .toNumber();\n }\n\n if (orderSide === OrderSide.SELL) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(1)\n .minus(new Decimal(percentage))\n .mul(new Decimal(entryPrice))\n .toNumber();\n }\n\n return new Decimal(1)\n .add(new Decimal(percentage))\n .mul(new Decimal(entryPrice))\n .toNumber();\n }\n}\n\nexport function priceToOffsetPercentage(inputs: {\n qty: number;\n price: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n}) {\n const { qty, price, entryPrice, orderType, orderSide } = inputs;\n\n if (orderSide === OrderSide.BUY) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(price)\n .div(new Decimal(entryPrice))\n .minus(1)\n .toNumber();\n }\n\n return new Decimal(1)\n .minus(new Decimal(price).div(new Decimal(entryPrice)))\n .toNumber();\n }\n\n if (orderSide === OrderSide.SELL) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(1)\n .minus(new Decimal(price).div(new Decimal(entryPrice)))\n .toNumber();\n }\n\n return new Decimal(price).div(new Decimal(entryPrice)).minus(1).toNumber();\n }\n}\n\n/**\n * pnl -> TP/SL price\n */\nexport function pnlToPrice(inputs: {\n qty: number;\n pnl: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n}) {\n const { qty, pnl, entryPrice, orderType, orderSide } = inputs;\n\n console.log(\"pnlToPrice\", inputs);\n\n if (!pnl) {\n return;\n }\n\n if (orderSide === OrderSide.BUY) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(entryPrice)\n .plus(new Decimal(pnl).div(new Decimal(qty)))\n .toNumber();\n }\n\n return new Decimal(entryPrice)\n .add(new Decimal(pnl).div(new Decimal(qty)))\n .toNumber();\n }\n if (orderSide === OrderSide.SELL) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(entryPrice)\n .add(new Decimal(pnl).div(new Decimal(qty)))\n .toNumber();\n }\n\n return new Decimal(entryPrice)\n .add(new Decimal(pnl).div(new Decimal(qty)))\n .toNumber();\n }\n}\n\n/**\n * TP/SL price -> pnl\n */\nexport function priceToPnl(\n inputs: {\n qty: number;\n price: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n },\n options: { symbol?: API.SymbolExt } = {}\n): number {\n const { qty, price, entryPrice, orderType, orderSide } = inputs;\n const { symbol } = options;\n let decimal = zero;\n\n if (orderSide === OrderSide.BUY) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n decimal = new Decimal(qty).mul(\n new Decimal(price).minus(new Decimal(entryPrice))\n );\n }\n\n decimal = new Decimal(qty).mul(\n new Decimal(price).minus(new Decimal(entryPrice))\n );\n }\n\n if (orderSide === OrderSide.SELL) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n decimal = new Decimal(qty).mul(\n new Decimal(price).minus(new Decimal(entryPrice))\n );\n }\n\n decimal = new Decimal(qty).mul(\n new Decimal(price).minus(new Decimal(entryPrice))\n );\n }\n\n if (symbol) {\n return decimal.todp(symbol.quote_dp, 4).toNumber();\n }\n\n return decimal.toNumber();\n}\n\nexport function calculateHelper(\n key: string,\n inputs: {\n key: string;\n value: string | number;\n entryPrice: number;\n qty: number;\n orderSide: OrderSide;\n },\n options: { symbol?: API.SymbolExt } = {}\n) {\n const { symbol } = options;\n // if not need to be computed, return the value directly\n if (\n key !== \"quantity\" &&\n key !== \"tp_trigger_price\" &&\n key !== \"sl_trigger_price\" &&\n key !== \"tp_pnl\" &&\n key !== \"sl_pnl\" &&\n key !== \"tp_offset\" &&\n key !== \"sl_offset\" &&\n key !== \"tp_offset_percentage\" &&\n key !== \"sl_offset_percentage\"\n ) {\n return {\n [key]: inputs.value,\n };\n }\n\n const orderType = key.startsWith(\"tp_\")\n ? AlgoOrderType.TAKE_PROFIT\n : AlgoOrderType.STOP_LOSS;\n const keyPrefix = key.slice(0, 3);\n\n let qty = Number(key === \"quantity\" ? inputs.value : inputs.qty);\n\n if (qty === 0)\n return {\n [`${keyPrefix}trigger_price`]: \"\",\n // [`${keyPrefix}offset`]: \"\",\n // [`${keyPrefix}offset_percentage`]: \"\",\n [`${keyPrefix}pnl`]: \"\",\n [key]: inputs.value,\n };\n\n let trigger_price, offset, offset_percentage, pnl;\n\n switch (key) {\n case \"tp_trigger_price\":\n case \"sl_trigger_price\": {\n trigger_price = inputs.value;\n // if trigger price is empty and the key is `*_trigger_price`, reset the offset and pnl\n if (inputs.value === \"\") {\n return {\n [`${keyPrefix}trigger_price`]: trigger_price,\n [`${keyPrefix}offset`]: \"\",\n [`${keyPrefix}offset_percentage`]: \"\",\n [`${keyPrefix}pnl`]: \"\",\n };\n }\n break;\n }\n\n case \"tp_pnl\":\n case \"sl_pnl\": {\n pnl = inputs.value;\n trigger_price = pnlToPrice({\n qty,\n pnl: Number(inputs.value),\n entryPrice: inputs.entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n });\n break;\n }\n\n case \"tp_offset\":\n case \"sl_offset\": {\n offset = inputs.value;\n trigger_price = offsetToPrice({\n qty,\n offset: Number(inputs.value),\n entryPrice: inputs.entryPrice,\n orderSide: inputs.orderSide,\n orderType:\n key === \"tp_offset\"\n ? AlgoOrderType.TAKE_PROFIT\n : AlgoOrderType.STOP_LOSS,\n });\n break;\n }\n\n case \"tp_offset_percentage\":\n case \"sl_offset_percentage\": {\n offset_percentage = inputs.value;\n trigger_price = offsetPercentageToPrice({\n qty,\n percentage: Number(inputs.value),\n entryPrice: inputs.entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n });\n break;\n }\n }\n\n if (!trigger_price)\n return {\n [`${keyPrefix}trigger_price`]: \"\",\n [`${keyPrefix}offset`]: \"\",\n [`${keyPrefix}offset_percentage`]: \"\",\n [`${keyPrefix}pnl`]: \"\",\n [key]: inputs.value,\n };\n\n return {\n [`${keyPrefix}trigger_price`]: symbol\n ? new Decimal(Number(trigger_price)).todp(symbol.quote_dp, 4).toNumber()\n : trigger_price,\n [`${keyPrefix}offset`]:\n offset ??\n priceToOffset(\n {\n qty,\n price: Number(trigger_price!),\n entryPrice: inputs.entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n },\n options\n ),\n [`${keyPrefix}offset_percentage`]:\n offset_percentage ??\n priceToOffsetPercentage({\n qty,\n price: Number(trigger_price!),\n entryPrice: inputs.entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n }),\n [`${keyPrefix}pnl`]:\n pnl ??\n priceToPnl(\n {\n qty,\n price: Number(trigger_price!),\n entryPrice: inputs.entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n },\n options\n ),\n };\n}\n"],"names":["calculateHelper","offsetPercentageToPrice","offsetToPrice","pnlToPrice","priceToOffset","priceToOffsetPercentage","priceToPnl","inputs","qty","offset","entryPrice","orderType","orderSide","OrderSide","BUY","AlgoOrderType","TAKE_PROFIT","Decimal","add","toNumber","minus","SELL","options","price","symbol","decimal","abs","todp","quote_dp","percentage","mul","div","pnl","plus","zero","key","value","startsWith","STOP_LOSS","keyPrefix","slice","Number","trigger_price","offset_percentage"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../../src/orderly/useTakeProfitAndStopLoss/utils.ts"],"sourcesContent":["import { API, OrderSide, PositionSide } from \"@orderly.network/types\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { AlgoOrderType } from \"@orderly.network/types\";\nimport { Decimal, todpIfNeed, zero } from \"@orderly.network/utils\";\n\nexport type UpdateOrderKey =\n | \"tp_trigger_price\"\n | \"tp_offset_percentage\"\n | \"tp_pnl\"\n | \"tp_offset\"\n | \"quantity\"\n | \"sl_trigger_price\"\n | \"sl_offset_percentage\"\n | \"sl_pnl\"\n | \"sl_offset\";\n\n/**\n * offset -> TP/SL price\n */\nexport function offsetToPrice(inputs: {\n qty: number;\n offset: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n}) {\n const { qty, offset, entryPrice, orderType, orderSide } = inputs;\n\n if (!offset) return;\n\n if (orderSide === OrderSide.BUY) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(entryPrice).add(new Decimal(offset)).toNumber();\n }\n\n return new Decimal(entryPrice).minus(new Decimal(offset)).toNumber();\n }\n\n if (orderSide === OrderSide.SELL) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(entryPrice).minus(new Decimal(offset)).toNumber();\n }\n\n return new Decimal(entryPrice).add(new Decimal(offset)).toNumber();\n }\n}\n\nexport function priceToOffset(\n inputs: {\n qty: number;\n price: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n },\n options: { symbol?: API.SymbolExt } = {}\n) {\n const { qty, price, entryPrice, orderType, orderSide } = inputs;\n const { symbol } = options;\n let decimal: Decimal;\n\n if (orderSide === OrderSide.BUY) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n decimal = new Decimal(price).minus(new Decimal(entryPrice));\n }\n\n decimal = new Decimal(price).minus(new Decimal(entryPrice));\n }\n\n if (orderSide === OrderSide.SELL) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n decimal = new Decimal(price).minus(new Decimal(entryPrice));\n }\n\n decimal = new Decimal(entryPrice).minus(new Decimal(price));\n }\n\n if (symbol) {\n return decimal!.abs().todp(symbol.quote_dp, Decimal.ROUND_UP).toNumber();\n }\n\n return decimal!.abs().toNumber();\n}\n\nexport function offsetPercentageToPrice(inputs: {\n qty: number;\n percentage: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n}) {\n const { qty, percentage, entryPrice, orderType, orderSide } = inputs;\n\n if (!percentage) return;\n\n if (orderSide === OrderSide.BUY) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(1)\n .add(new Decimal(percentage))\n .mul(new Decimal(entryPrice))\n .toNumber();\n }\n\n return new Decimal(1)\n .minus(new Decimal(percentage))\n .mul(new Decimal(entryPrice))\n .toNumber();\n }\n\n if (orderSide === OrderSide.SELL) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(1)\n .minus(new Decimal(percentage))\n .mul(new Decimal(entryPrice))\n .toNumber();\n }\n\n return new Decimal(1)\n .add(new Decimal(percentage))\n .mul(new Decimal(entryPrice))\n .toNumber();\n }\n}\n\nexport function priceToOffsetPercentage(inputs: {\n qty: number;\n price: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n}) {\n const { qty, price, entryPrice, orderType, orderSide } = inputs;\n\n if (orderSide === OrderSide.BUY) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(price)\n .div(new Decimal(entryPrice))\n .minus(1)\n .toNumber();\n }\n\n return new Decimal(1)\n .minus(new Decimal(price).div(new Decimal(entryPrice)))\n .toNumber();\n }\n\n if (orderSide === OrderSide.SELL) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(1)\n .minus(new Decimal(price).div(new Decimal(entryPrice)))\n .toNumber();\n }\n\n return new Decimal(price).div(new Decimal(entryPrice)).minus(1).toNumber();\n }\n}\n\n/**\n * pnl -> TP/SL price\n */\nexport function pnlToPrice(inputs: {\n qty: number;\n pnl: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n}) {\n const { qty, pnl, entryPrice, orderType, orderSide } = inputs;\n\n // console.log(\"pnlToPrice\", inputs);\n\n if (!pnl) {\n return;\n }\n\n if (orderSide === OrderSide.BUY) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(entryPrice)\n .plus(new Decimal(pnl).div(new Decimal(qty)))\n .toNumber();\n }\n\n return new Decimal(entryPrice)\n .add(new Decimal(pnl).div(new Decimal(qty)))\n .toNumber();\n }\n if (orderSide === OrderSide.SELL) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(entryPrice)\n .add(new Decimal(pnl).div(new Decimal(qty)))\n .toNumber();\n }\n\n return new Decimal(entryPrice)\n .add(new Decimal(pnl).div(new Decimal(qty)))\n .toNumber();\n }\n}\n\n/**\n * TP/SL price -> pnl\n */\nexport function priceToPnl(\n inputs: {\n qty: number;\n price: number;\n entryPrice: number;\n orderSide: OrderSide;\n orderType: AlgoOrderType;\n },\n options: { symbol?: API.SymbolExt } = {}\n): number {\n const { qty, price, entryPrice, orderType, orderSide } = inputs;\n const { symbol } = options;\n let decimal = zero;\n\n if (orderSide === OrderSide.BUY) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n decimal = new Decimal(qty).mul(\n new Decimal(price).minus(new Decimal(entryPrice))\n );\n }\n\n decimal = new Decimal(qty).mul(\n new Decimal(price).minus(new Decimal(entryPrice))\n );\n }\n\n if (orderSide === OrderSide.SELL) {\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n decimal = new Decimal(qty).mul(\n new Decimal(price).minus(new Decimal(entryPrice))\n );\n }\n\n decimal = new Decimal(qty).mul(\n new Decimal(price).minus(new Decimal(entryPrice))\n );\n }\n\n if (symbol) {\n return decimal.todp(symbol.quote_dp, Decimal.ROUND_DOWN).toNumber();\n }\n\n return decimal.toNumber();\n}\n\n// function formatPrice(price: number | string, symbol?: API.SymbolExt) {\n// if (typeof price !== \"string\") {\n// price = `${price}`;\n// }\n\n// if (price.endsWith(\".\") || !symbol) {\n// return price;\n// }\n// return new Decimal(Number(price))\n// .todp(symbol.quote_dp, Decimal.ROUND_UP)\n// .toNumber();\n// }\n\nexport function calculateHelper(\n key: string,\n inputs: {\n key: string;\n value: string | number;\n entryPrice: number;\n qty: number;\n orderSide: OrderSide;\n },\n options: { symbol?: API.SymbolExt } = {}\n) {\n const { symbol } = options;\n // if not need to be computed, return the value directly\n if (\n key !== \"quantity\" &&\n key !== \"tp_trigger_price\" &&\n key !== \"sl_trigger_price\" &&\n key !== \"tp_pnl\" &&\n key !== \"sl_pnl\" &&\n key !== \"tp_offset\" &&\n key !== \"sl_offset\" &&\n key !== \"tp_offset_percentage\" &&\n key !== \"sl_offset_percentage\"\n ) {\n return {\n [key]: inputs.value,\n };\n }\n\n const orderType = key.startsWith(\"tp_\")\n ? AlgoOrderType.TAKE_PROFIT\n : AlgoOrderType.STOP_LOSS;\n const keyPrefix = key.slice(0, 3);\n\n let qty = Number(key === \"quantity\" ? inputs.value : inputs.qty);\n\n if (qty === 0)\n return {\n [`${keyPrefix}trigger_price`]: \"\",\n // [`${keyPrefix}offset`]: \"\",\n // [`${keyPrefix}offset_percentage`]: \"\",\n [`${keyPrefix}pnl`]: \"\",\n [key]: inputs.value,\n };\n\n let trigger_price, offset, offset_percentage, pnl;\n\n const entryPrice = new Decimal(inputs.entryPrice)\n .todp(options.symbol?.quote_dp ?? 2, Decimal.ROUND_UP)\n .toNumber();\n\n // console.log(\"******* entryPrice\", options.symbol?.quote_dp, entryPrice);\n\n switch (key) {\n case \"tp_trigger_price\":\n case \"sl_trigger_price\": {\n trigger_price = inputs.value;\n // if trigger price is empty and the key is `*_trigger_price`, reset the offset and pnl\n if (inputs.value === \"\") {\n return {\n [`${keyPrefix}trigger_price`]: trigger_price,\n [`${keyPrefix}offset`]: \"\",\n [`${keyPrefix}offset_percentage`]: \"\",\n [`${keyPrefix}pnl`]: \"\",\n };\n }\n break;\n }\n\n case \"tp_pnl\":\n case \"sl_pnl\": {\n pnl = inputs.value;\n trigger_price = pnlToPrice({\n qty,\n pnl: Number(inputs.value),\n entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n });\n break;\n }\n\n case \"tp_offset\":\n case \"sl_offset\": {\n offset = inputs.value;\n trigger_price = offsetToPrice({\n qty,\n offset: Number(inputs.value),\n entryPrice,\n orderSide: inputs.orderSide,\n orderType:\n key === \"tp_offset\"\n ? AlgoOrderType.TAKE_PROFIT\n : AlgoOrderType.STOP_LOSS,\n });\n break;\n }\n\n case \"tp_offset_percentage\":\n case \"sl_offset_percentage\": {\n offset_percentage = inputs.value;\n trigger_price = offsetPercentageToPrice({\n qty,\n percentage: Number(inputs.value),\n entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n });\n break;\n }\n }\n\n if (!trigger_price)\n return {\n [`${keyPrefix}trigger_price`]: \"\",\n [`${keyPrefix}offset`]: \"\",\n [`${keyPrefix}offset_percentage`]: \"\",\n [`${keyPrefix}pnl`]: \"\",\n [key]: inputs.value,\n };\n\n return {\n [`${keyPrefix}trigger_price`]: todpIfNeed(\n trigger_price,\n symbol?.quote_dp ?? 2\n ),\n [`${keyPrefix}offset`]:\n offset ??\n priceToOffset(\n {\n qty,\n price: Number(trigger_price!),\n entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n },\n options\n ),\n [`${keyPrefix}offset_percentage`]:\n offset_percentage ??\n priceToOffsetPercentage({\n qty,\n price: Number(trigger_price!),\n entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n }),\n [`${keyPrefix}pnl`]:\n pnl ??\n priceToPnl(\n {\n qty,\n price: Number(trigger_price!),\n entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n },\n options\n ),\n };\n}\n"],"names":["calculateHelper","offsetPercentageToPrice","offsetToPrice","pnlToPrice","priceToOffset","priceToOffsetPercentage","priceToPnl","inputs","qty","offset","entryPrice","orderType","orderSide","OrderSide","BUY","AlgoOrderType","TAKE_PROFIT","Decimal","add","toNumber","minus","SELL","options","price","symbol","decimal","abs","todp","quote_dp","ROUND_UP","percentage","mul","div","pnl","plus","zero","ROUND_DOWN","key","value","startsWith","STOP_LOSS","keyPrefix","slice","Number","trigger_price","offset_percentage","todpIfNeed"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -16,7 +16,7 @@ class TPSLOrderCreator extends _baseAlgoCreator.BaseAlgoOrderCreator {
16
16
  const side = values.side === _types.OrderSide.BUY ? _types.OrderSide.SELL : _types.OrderSide.BUY;
17
17
  const child_orders = [];
18
18
  if (typeof values.tp_trigger_price !== "undefined") {
19
- const tp_trigger_price = !!values.sl_trigger_price ? new _utils.Decimal(values.tp_trigger_price).todp(config.symbol.quote_dp).toNumber() : values.tp_trigger_price;
19
+ const tp_trigger_price = !!values.tp_trigger_price ? new _utils.Decimal(values.tp_trigger_price).todp(config.symbol.quote_dp).toNumber() : values.tp_trigger_price;
20
20
  child_orders.push({
21
21
  algo_type: _types.AlgoOrderType.TAKE_PROFIT,
22
22
  reduce_only: true,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/services/orderCreator/tpslOrderCreator.ts"],"sourcesContent":["import { AlgoOrderEntity, OrderType, API } from \"@orderly.network/types\";\nimport { TriggerPriceType } from \"@orderly.network/types\";\nimport { AlgoOrderType } from \"@orderly.network/types\";\nimport { AlgoOrderRootType } from \"@orderly.network/types\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport { AlgoOrderUpdateEntity, BaseAlgoOrderCreator } from \"./baseAlgoCreator\";\nimport { ValuesDepConfig } from \"./interface\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport class TPSLOrderCreator extends BaseAlgoOrderCreator<\n AlgoOrderEntity<AlgoOrderRootType.TP_SL>\n> {\n create(\n values: AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n config: ValuesDepConfig\n ) {\n const side =\n values.side! === OrderSide.BUY ? OrderSide.SELL : OrderSide.BUY;\n\n const child_orders = [];\n\n if (typeof values.tp_trigger_price !== \"undefined\") {\n const tp_trigger_price = !!values.sl_trigger_price\n ? new Decimal(values.tp_trigger_price)\n .todp(config.symbol.quote_dp)\n .toNumber()\n : values.tp_trigger_price;\n\n child_orders.push({\n algo_type: AlgoOrderType.TAKE_PROFIT,\n reduce_only: true,\n side,\n type: OrderType.MARKET,\n trigger_price: tp_trigger_price,\n symbol: values.symbol,\n is_activated: !!values.tp_trigger_price,\n });\n }\n\n if (typeof values.sl_trigger_price !== \"undefined\") {\n const sl_trigger_price = !!values.sl_trigger_price\n ? new Decimal(values.sl_trigger_price)\n .todp(config.symbol.quote_dp)\n .toNumber()\n : values.sl_trigger_price;\n child_orders.push({\n algo_type: AlgoOrderType.STOP_LOSS,\n reduce_only: true,\n side,\n type: OrderType.MARKET,\n trigger_price: sl_trigger_price,\n symbol: values.symbol,\n is_activated: !!values.sl_trigger_price,\n });\n }\n\n return {\n algo_type: AlgoOrderRootType.TP_SL,\n trigger_price_type: TriggerPriceType.MARK_PRICE,\n reduce_only: true,\n quantity: values.quantity,\n symbol: values.symbol,\n child_orders,\n };\n }\n\n crateUpdateOrder(\n values: AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n oldValue: API.AlgoOrder,\n config: ValuesDepConfig\n ): [\n { child_orders: AlgoOrderUpdateEntity[] },\n AlgoOrderEntity<AlgoOrderRootType.TP_SL>\n ] {\n const data = this.create(values, config);\n const newData: AlgoOrderUpdateEntity[] = [];\n\n const needUpdateQty = values.quantity !== oldValue.quantity;\n\n data.child_orders.forEach((order) => {\n // find the old order\n let _order = Object.create(null);\n\n if (needUpdateQty) {\n _order[\"quantity\"] = data.quantity;\n }\n\n const oldOrder = oldValue.child_orders?.find(\n (oldOrder) => oldOrder.algo_type === order.algo_type\n );\n\n if (oldOrder) {\n if (!order.is_activated) {\n _order[\"is_activated\"] = false;\n } else if (oldOrder.trigger_price !== order.trigger_price) {\n // _order[\"order_id\"] = Number(oldOrder.algo_order_id);\n _order[\"trigger_price\"] = order.trigger_price as number;\n }\n\n if (Object.keys(_order).length > 0) {\n _order[\"order_id\"] = Number(oldOrder.algo_order_id);\n newData.push(_order);\n }\n }\n });\n\n if (needUpdateQty && newData.length < 2) {\n // if quantity is changed, need to update all child orders\n const missingOrders = oldValue.child_orders.filter(\n (order) => order.algo_order_id !== newData[0].order_id\n );\n\n if (missingOrders.length) {\n newData.push({\n quantity: Number(data.quantity),\n order_id: missingOrders[0].algo_order_id,\n });\n }\n }\n\n return [\n {\n child_orders: newData,\n },\n data,\n ];\n }\n}\n"],"names":["TPSLOrderCreator","BaseAlgoOrderCreator","create","values","config","side","OrderSide","BUY","SELL","child_orders","tp_trigger_price","sl_trigger_price","Decimal","todp","symbol","quote_dp","toNumber","push","algo_type","AlgoOrderType","TAKE_PROFIT","reduce_only","type","OrderType","MARKET","trigger_price","is_activated","STOP_LOSS","AlgoOrderRootType","TP_SL","trigger_price_type","TriggerPriceType","MARK_PRICE","quantity","crateUpdateOrder","oldValue","data","newData","needUpdateQty","forEach","order","_order","Object","oldOrder","find","keys","length","Number","algo_order_id","missingOrders","filter","order_id"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../../src/services/orderCreator/tpslOrderCreator.ts"],"sourcesContent":["import { AlgoOrderEntity, OrderType, API } from \"@orderly.network/types\";\nimport { TriggerPriceType } from \"@orderly.network/types\";\nimport { AlgoOrderType } from \"@orderly.network/types\";\nimport { AlgoOrderRootType } from \"@orderly.network/types\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport { AlgoOrderUpdateEntity, BaseAlgoOrderCreator } from \"./baseAlgoCreator\";\nimport { ValuesDepConfig } from \"./interface\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport class TPSLOrderCreator extends BaseAlgoOrderCreator<\n AlgoOrderEntity<AlgoOrderRootType.TP_SL>\n> {\n create(\n values: AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n config: ValuesDepConfig\n ) {\n const side =\n values.side! === OrderSide.BUY ? OrderSide.SELL : OrderSide.BUY;\n\n const child_orders = [];\n\n if (typeof values.tp_trigger_price !== \"undefined\") {\n const tp_trigger_price = !!values.tp_trigger_price\n ? new Decimal(values.tp_trigger_price)\n .todp(config.symbol.quote_dp)\n .toNumber()\n : values.tp_trigger_price;\n\n child_orders.push({\n algo_type: AlgoOrderType.TAKE_PROFIT,\n reduce_only: true,\n side,\n type: OrderType.MARKET,\n trigger_price: tp_trigger_price,\n symbol: values.symbol,\n is_activated: !!values.tp_trigger_price,\n });\n }\n\n if (typeof values.sl_trigger_price !== \"undefined\") {\n const sl_trigger_price = !!values.sl_trigger_price\n ? new Decimal(values.sl_trigger_price)\n .todp(config.symbol.quote_dp)\n .toNumber()\n : values.sl_trigger_price;\n child_orders.push({\n algo_type: AlgoOrderType.STOP_LOSS,\n reduce_only: true,\n side,\n type: OrderType.MARKET,\n trigger_price: sl_trigger_price,\n symbol: values.symbol,\n is_activated: !!values.sl_trigger_price,\n });\n }\n\n return {\n algo_type: AlgoOrderRootType.TP_SL,\n trigger_price_type: TriggerPriceType.MARK_PRICE,\n reduce_only: true,\n quantity: values.quantity,\n symbol: values.symbol,\n child_orders,\n };\n }\n\n crateUpdateOrder(\n values: AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n oldValue: API.AlgoOrder,\n config: ValuesDepConfig\n ): [\n { child_orders: AlgoOrderUpdateEntity[] },\n AlgoOrderEntity<AlgoOrderRootType.TP_SL>\n ] {\n const data = this.create(values, config);\n const newData: AlgoOrderUpdateEntity[] = [];\n\n const needUpdateQty = values.quantity !== oldValue.quantity;\n\n data.child_orders.forEach((order) => {\n // find the old order\n let _order = Object.create(null);\n\n if (needUpdateQty) {\n _order[\"quantity\"] = data.quantity;\n }\n\n const oldOrder = oldValue.child_orders?.find(\n (oldOrder) => oldOrder.algo_type === order.algo_type\n );\n\n if (oldOrder) {\n if (!order.is_activated) {\n _order[\"is_activated\"] = false;\n } else if (oldOrder.trigger_price !== order.trigger_price) {\n // _order[\"order_id\"] = Number(oldOrder.algo_order_id);\n _order[\"trigger_price\"] = order.trigger_price as number;\n }\n\n if (Object.keys(_order).length > 0) {\n _order[\"order_id\"] = Number(oldOrder.algo_order_id);\n newData.push(_order);\n }\n }\n });\n\n if (needUpdateQty && newData.length < 2) {\n // if quantity is changed, need to update all child orders\n const missingOrders = oldValue.child_orders.filter(\n (order) => order.algo_order_id !== newData[0].order_id\n );\n\n if (missingOrders.length) {\n newData.push({\n quantity: Number(data.quantity),\n order_id: missingOrders[0].algo_order_id,\n });\n }\n }\n\n return [\n {\n child_orders: newData,\n },\n data,\n ];\n }\n}\n"],"names":["TPSLOrderCreator","BaseAlgoOrderCreator","create","values","config","side","OrderSide","BUY","SELL","child_orders","tp_trigger_price","Decimal","todp","symbol","quote_dp","toNumber","push","algo_type","AlgoOrderType","TAKE_PROFIT","reduce_only","type","OrderType","MARKET","trigger_price","is_activated","sl_trigger_price","STOP_LOSS","AlgoOrderRootType","TP_SL","trigger_price_type","TriggerPriceType","MARK_PRICE","quantity","crateUpdateOrder","oldValue","data","newData","needUpdateQty","forEach","order","_order","Object","oldOrder","find","keys","length","Number","algo_order_id","missingOrders","filter","order_id"],"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.4.0-alpha.0";
8
+ declare const _default: "1.4.0-alpha.1";
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.4.0-alpha.0";
13
+ window.__ORDERLY_VERSION__["@orderly.network/hooks"] = "1.4.0-alpha.1";
14
14
  }
15
- const _default = "1.4.0-alpha.0";
15
+ const _default = "1.4.0-alpha.1";
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.4.0-alpha.0\";\n};\n\nexport default \"1.4.0-alpha.0\";\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.4.0-alpha.1\";\n};\n\nexport default \"1.4.0-alpha.1\";\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"}