@orderly.network/hooks 1.3.0-alpha.0 → 1.4.0-alpha.0
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.
- package/esm/dataProvider.d.ts.map +1 -1
- package/esm/dataProvider.js +0 -2
- package/esm/dataProvider.js.map +1 -1
- package/esm/index.d.ts +4 -3
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +4 -3
- package/esm/index.js.map +1 -1
- package/esm/orderly/orderlyHooks.d.ts +3 -2
- package/esm/orderly/orderlyHooks.d.ts.map +1 -1
- package/esm/orderly/orderlyHooks.js +3 -2
- package/esm/orderly/orderlyHooks.js.map +1 -1
- package/esm/orderly/useCollateral.js +2 -2
- package/esm/orderly/useCollateral.js.map +1 -1
- package/esm/orderly/useMarginRatio.js +1 -1
- package/esm/orderly/useMarginRatio.js.map +1 -1
- package/esm/orderly/useMaxQty.js +2 -2
- package/esm/orderly/useMaxQty.js.map +1 -1
- package/esm/orderly/useOrderEntry.d.ts.map +1 -1
- package/esm/orderly/useOrderEntry.js +15 -12
- package/esm/orderly/useOrderEntry.js.map +1 -1
- package/esm/orderly/useOrderEntryNext/index.d.ts +1 -0
- package/esm/orderly/useOrderEntryNext/index.d.ts.map +1 -0
- package/esm/orderly/useOrderEntryNext/index.js +2 -0
- package/esm/orderly/useOrderEntryNext/index.js.map +1 -0
- package/esm/orderly/{useOrderStream.d.ts → useOrderStream/useOrderStream.d.ts} +19 -12
- package/esm/orderly/useOrderStream/useOrderStream.d.ts.map +1 -0
- package/esm/orderly/{useOrderStream.js → useOrderStream/useOrderStream.js} +91 -26
- package/esm/orderly/useOrderStream/useOrderStream.js.map +1 -0
- package/esm/orderly/useOrderbookStream.d.ts.map +1 -1
- package/esm/orderly/useOrderbookStream.js +13 -6
- package/esm/orderly/useOrderbookStream.js.map +1 -1
- package/esm/orderly/{usePositionStream.d.ts → usePositionStream/usePositionStream.d.ts} +1 -1
- package/esm/orderly/usePositionStream/usePositionStream.d.ts.map +1 -0
- package/esm/orderly/{usePositionStream.js → usePositionStream/usePositionStream.js} +30 -22
- package/esm/orderly/usePositionStream/usePositionStream.js.map +1 -0
- package/esm/orderly/usePositionStream/utils.d.ts +8 -0
- package/esm/orderly/usePositionStream/utils.d.ts.map +1 -0
- package/esm/orderly/usePositionStream/utils.js +34 -0
- package/esm/orderly/usePositionStream/utils.js.map +1 -0
- package/esm/orderly/usePrivateDataObserver.d.ts.map +1 -1
- package/esm/orderly/usePrivateDataObserver.js +30 -43
- package/esm/orderly/usePrivateDataObserver.js.map +1 -1
- package/esm/orderly/useTakeProfitAndStopLoss/__test__/useTakeProfitAndStopLoss.test.d.ts +1 -0
- package/esm/orderly/useTakeProfitAndStopLoss/__test__/useTakeProfitAndStopLoss.test.d.ts.map +1 -0
- package/esm/orderly/useTakeProfitAndStopLoss/__test__/utils.test.d.ts +2 -0
- package/esm/orderly/useTakeProfitAndStopLoss/__test__/utils.test.d.ts.map +1 -0
- package/esm/orderly/useTakeProfitAndStopLoss/index.d.ts +32 -0
- package/esm/orderly/useTakeProfitAndStopLoss/index.d.ts.map +1 -0
- package/esm/orderly/useTakeProfitAndStopLoss/index.js +23 -0
- package/esm/orderly/useTakeProfitAndStopLoss/index.js.map +1 -0
- package/esm/orderly/useTakeProfitAndStopLoss/useTPSL.d.ts +59 -0
- package/esm/orderly/useTakeProfitAndStopLoss/useTPSL.d.ts.map +1 -0
- package/esm/orderly/useTakeProfitAndStopLoss/useTPSL.js +211 -0
- package/esm/orderly/useTakeProfitAndStopLoss/useTPSL.js.map +1 -0
- package/esm/orderly/useTakeProfitAndStopLoss/utils.d.ts +70 -0
- package/esm/orderly/useTakeProfitAndStopLoss/utils.d.ts.map +1 -0
- package/esm/orderly/useTakeProfitAndStopLoss/utils.js +226 -0
- package/esm/orderly/useTakeProfitAndStopLoss/utils.js.map +1 -0
- package/esm/services/orderCreator/__test__/limitOrderCreator.test.d.ts +2 -0
- package/esm/services/orderCreator/__test__/limitOrderCreator.test.d.ts.map +1 -0
- package/esm/services/orderCreator/__test__/orderCreator.test.d.ts +2 -0
- package/esm/services/orderCreator/__test__/orderCreator.test.d.ts.map +1 -0
- package/esm/services/orderCreator/__test__/stopLimitOrderCreator.test.d.ts +2 -0
- package/esm/services/orderCreator/__test__/stopLimitOrderCreator.test.d.ts.map +1 -0
- package/esm/services/orderCreator/__test__/stopMarketOrderCreator.test.d.ts +2 -0
- package/esm/services/orderCreator/__test__/stopMarketOrderCreator.test.d.ts.map +1 -0
- package/esm/services/orderCreator/__test__/tpslOrderCreator.test.d.ts +2 -0
- package/esm/services/orderCreator/__test__/tpslOrderCreator.test.d.ts.map +1 -0
- package/esm/services/orderCreator/__test__/tpslPositionOrderCreator.test.d.ts +2 -0
- package/esm/services/orderCreator/__test__/tpslPositionOrderCreator.test.d.ts.map +1 -0
- package/esm/services/orderCreator/baseAlgoCreator.d.ts +22 -0
- package/esm/services/orderCreator/baseAlgoCreator.d.ts.map +1 -0
- package/esm/services/orderCreator/baseAlgoCreator.js +57 -0
- package/esm/services/orderCreator/baseAlgoCreator.js.map +1 -0
- package/esm/services/orderCreator/baseCreator.d.ts +14 -0
- package/esm/services/orderCreator/baseCreator.d.ts.map +1 -0
- package/esm/services/orderCreator/baseCreator.js +92 -0
- package/esm/services/orderCreator/baseCreator.js.map +1 -0
- package/esm/services/orderCreator/factory.d.ts +7 -0
- package/esm/services/orderCreator/factory.d.ts.map +1 -0
- package/esm/services/orderCreator/factory.js +45 -0
- package/esm/services/orderCreator/factory.js.map +1 -0
- package/esm/services/orderCreator/fokCreator.d.ts +4 -0
- package/esm/services/orderCreator/fokCreator.d.ts.map +1 -0
- package/esm/services/orderCreator/fokCreator.js +5 -0
- package/esm/services/orderCreator/fokCreator.js.map +1 -0
- package/esm/services/orderCreator/generalCreator.d.ts +8 -0
- package/esm/services/orderCreator/generalCreator.d.ts.map +1 -0
- package/esm/services/orderCreator/generalCreator.js +15 -0
- package/esm/services/orderCreator/generalCreator.js.map +1 -0
- package/esm/services/orderCreator/interface.d.ts +23 -0
- package/esm/services/orderCreator/interface.d.ts.map +1 -0
- package/esm/services/orderCreator/interface.js +3 -0
- package/esm/services/orderCreator/interface.js.map +1 -0
- package/esm/services/orderCreator/iocCreator.d.ts +4 -0
- package/esm/services/orderCreator/iocCreator.d.ts.map +1 -0
- package/esm/services/orderCreator/iocCreator.js +5 -0
- package/esm/services/orderCreator/iocCreator.js.map +1 -0
- package/esm/services/orderCreator/limitOrderCreator.d.ts +8 -0
- package/esm/services/orderCreator/limitOrderCreator.d.ts.map +1 -0
- package/esm/services/orderCreator/limitOrderCreator.js +69 -0
- package/esm/services/orderCreator/limitOrderCreator.js.map +1 -0
- package/esm/services/orderCreator/marketOrderCreator.d.ts +24 -0
- package/esm/services/orderCreator/marketOrderCreator.d.ts.map +1 -0
- package/esm/services/orderCreator/marketOrderCreator.js +18 -0
- package/esm/services/orderCreator/marketOrderCreator.js.map +1 -0
- package/esm/services/orderCreator/postOnlyCreator.d.ts +4 -0
- package/esm/services/orderCreator/postOnlyCreator.d.ts.map +1 -0
- package/esm/services/orderCreator/postOnlyCreator.js +5 -0
- package/esm/services/orderCreator/postOnlyCreator.js.map +1 -0
- package/esm/services/orderCreator/stopLimitOrderCreator.d.ts +11 -0
- package/esm/services/orderCreator/stopLimitOrderCreator.d.ts.map +1 -0
- package/esm/services/orderCreator/stopLimitOrderCreator.js +84 -0
- package/esm/services/orderCreator/stopLimitOrderCreator.js.map +1 -0
- package/esm/services/orderCreator/stopMarketOrderCreator.d.ts +30 -0
- package/esm/services/orderCreator/stopMarketOrderCreator.d.ts.map +1 -0
- package/esm/services/orderCreator/stopMarketOrderCreator.js +46 -0
- package/esm/services/orderCreator/stopMarketOrderCreator.js.map +1 -0
- package/esm/services/orderCreator/tpslOrderCreator.d.ts +32 -0
- package/esm/services/orderCreator/tpslOrderCreator.d.ts.map +1 -0
- package/esm/services/orderCreator/tpslOrderCreator.js +88 -0
- package/esm/services/orderCreator/tpslOrderCreator.js.map +1 -0
- package/esm/services/orderCreator/tpslPositionOrderCreator.d.ts +33 -0
- package/esm/services/orderCreator/tpslPositionOrderCreator.d.ts.map +1 -0
- package/esm/services/orderCreator/tpslPositionOrderCreator.js +74 -0
- package/esm/services/orderCreator/tpslPositionOrderCreator.js.map +1 -0
- package/esm/services/orderMerge/algoOrderMergeHandler.d.ts +9 -0
- package/esm/services/orderMerge/algoOrderMergeHandler.d.ts.map +1 -0
- package/esm/services/orderMerge/algoOrderMergeHandler.js +38 -0
- package/esm/services/orderMerge/algoOrderMergeHandler.js.map +1 -0
- package/esm/services/orderMerge/baseMergeHandler.d.ts +22 -0
- package/esm/services/orderMerge/baseMergeHandler.d.ts.map +1 -0
- package/esm/services/orderMerge/baseMergeHandler.js +160 -0
- package/esm/services/orderMerge/baseMergeHandler.js.map +1 -0
- package/esm/services/orderMerge/interface.d.ts +8 -0
- package/esm/services/orderMerge/interface.d.ts.map +1 -0
- package/esm/services/orderMerge/interface.js +3 -0
- package/esm/services/orderMerge/interface.js.map +1 -0
- package/esm/services/orderMerge/regularOrderMergeHandler.d.ts +8 -0
- package/esm/services/orderMerge/regularOrderMergeHandler.d.ts.map +1 -0
- package/esm/services/orderMerge/regularOrderMergeHandler.js +15 -0
- package/esm/services/orderMerge/regularOrderMergeHandler.js.map +1 -0
- package/esm/usePoster.d.ts +3 -0
- package/esm/usePoster.d.ts.map +1 -1
- package/esm/usePoster.js +3 -1
- package/esm/usePoster.js.map +1 -1
- package/esm/utils/createOrder.d.ts +0 -55
- package/esm/utils/createOrder.d.ts.map +1 -1
- package/esm/utils/createOrder.js +0 -334
- package/esm/utils/createOrder.js.map +1 -1
- package/esm/utils/fokCreator.d.ts +1 -0
- package/esm/utils/fokCreator.d.ts.map +1 -0
- package/esm/utils/fokCreator.js +2 -0
- package/esm/utils/fokCreator.js.map +1 -0
- package/esm/utils/index.d.ts +5 -0
- package/esm/utils/index.d.ts.map +1 -0
- package/esm/utils/index.js +6 -0
- package/esm/utils/index.js.map +1 -0
- package/esm/utils/order.d.ts +2 -0
- package/esm/utils/order.d.ts.map +1 -0
- package/esm/utils/order.js +3 -0
- package/esm/utils/order.js.map +1 -0
- package/esm/utils/swr.d.ts +3 -1
- package/esm/utils/swr.d.ts.map +1 -1
- package/esm/utils/swr.js +123 -89
- package/esm/utils/swr.js.map +1 -1
- package/esm/utils/ws.d.ts +2 -0
- package/esm/utils/ws.d.ts.map +1 -0
- package/esm/utils/ws.js +9 -0
- package/esm/utils/ws.js.map +1 -0
- package/esm/version.d.ts +1 -1
- package/esm/version.js +2 -2
- package/esm/version.js.map +1 -1
- package/lib/dataProvider.d.ts.map +1 -1
- package/lib/dataProvider.js +0 -2
- package/lib/dataProvider.js.map +1 -1
- package/lib/index.d.ts +4 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +10 -3
- package/lib/index.js.map +1 -1
- package/lib/orderly/orderlyHooks.d.ts +3 -2
- package/lib/orderly/orderlyHooks.d.ts.map +1 -1
- package/lib/orderly/orderlyHooks.js +6 -2
- package/lib/orderly/orderlyHooks.js.map +1 -1
- package/lib/orderly/useCollateral.js +2 -2
- package/lib/orderly/useCollateral.js.map +1 -1
- package/lib/orderly/useMarginRatio.js +1 -1
- package/lib/orderly/useMarginRatio.js.map +1 -1
- package/lib/orderly/useMaxQty.js +2 -2
- package/lib/orderly/useMaxQty.js.map +1 -1
- package/lib/orderly/useOrderEntry.d.ts.map +1 -1
- package/lib/orderly/useOrderEntry.js +14 -12
- package/lib/orderly/useOrderEntry.js.map +1 -1
- package/lib/orderly/useOrderEntryNext/index.d.ts +1 -0
- package/lib/orderly/useOrderEntryNext/index.d.ts.map +1 -0
- package/lib/orderly/useOrderEntryNext/index.js +3 -0
- package/lib/orderly/useOrderEntryNext/index.js.map +1 -0
- package/lib/orderly/{useOrderStream.d.ts → useOrderStream/useOrderStream.d.ts} +19 -12
- package/lib/orderly/useOrderStream/useOrderStream.d.ts.map +1 -0
- package/lib/orderly/{useOrderStream.js → useOrderStream/useOrderStream.js} +89 -25
- package/lib/orderly/useOrderStream/useOrderStream.js.map +1 -0
- package/lib/orderly/useOrderbookStream.d.ts.map +1 -1
- package/lib/orderly/useOrderbookStream.js +12 -5
- package/lib/orderly/useOrderbookStream.js.map +1 -1
- package/lib/orderly/{usePositionStream.d.ts → usePositionStream/usePositionStream.d.ts} +1 -1
- package/lib/orderly/usePositionStream/usePositionStream.d.ts.map +1 -0
- package/lib/orderly/{usePositionStream.js → usePositionStream/usePositionStream.js} +30 -22
- package/lib/orderly/usePositionStream/usePositionStream.js.map +1 -0
- package/lib/orderly/usePositionStream/utils.d.ts +8 -0
- package/lib/orderly/usePositionStream/utils.d.ts.map +1 -0
- package/lib/orderly/usePositionStream/utils.js +55 -0
- package/lib/orderly/usePositionStream/utils.js.map +1 -0
- package/lib/orderly/usePrivateDataObserver.d.ts.map +1 -1
- package/lib/orderly/usePrivateDataObserver.js +28 -41
- package/lib/orderly/usePrivateDataObserver.js.map +1 -1
- package/lib/orderly/useTakeProfitAndStopLoss/__test__/useTakeProfitAndStopLoss.test.d.ts +1 -0
- package/lib/orderly/useTakeProfitAndStopLoss/__test__/useTakeProfitAndStopLoss.test.d.ts.map +1 -0
- package/lib/orderly/useTakeProfitAndStopLoss/__test__/utils.test.d.ts +2 -0
- package/lib/orderly/useTakeProfitAndStopLoss/__test__/utils.test.d.ts.map +1 -0
- package/lib/orderly/useTakeProfitAndStopLoss/index.d.ts +32 -0
- package/lib/orderly/useTakeProfitAndStopLoss/index.d.ts.map +1 -0
- package/lib/orderly/useTakeProfitAndStopLoss/index.js +33 -0
- package/lib/orderly/useTakeProfitAndStopLoss/index.js.map +1 -0
- package/lib/orderly/useTakeProfitAndStopLoss/useTPSL.d.ts +59 -0
- package/lib/orderly/useTakeProfitAndStopLoss/useTPSL.d.ts.map +1 -0
- package/lib/orderly/useTakeProfitAndStopLoss/useTPSL.js +218 -0
- package/lib/orderly/useTakeProfitAndStopLoss/useTPSL.js.map +1 -0
- package/lib/orderly/useTakeProfitAndStopLoss/utils.d.ts +70 -0
- package/lib/orderly/useTakeProfitAndStopLoss/utils.d.ts.map +1 -0
- package/lib/orderly/useTakeProfitAndStopLoss/utils.js +252 -0
- package/lib/orderly/useTakeProfitAndStopLoss/utils.js.map +1 -0
- package/lib/services/orderCreator/__test__/limitOrderCreator.test.d.ts +2 -0
- package/lib/services/orderCreator/__test__/limitOrderCreator.test.d.ts.map +1 -0
- package/lib/services/orderCreator/__test__/orderCreator.test.d.ts +2 -0
- package/lib/services/orderCreator/__test__/orderCreator.test.d.ts.map +1 -0
- package/lib/services/orderCreator/__test__/stopLimitOrderCreator.test.d.ts +2 -0
- package/lib/services/orderCreator/__test__/stopLimitOrderCreator.test.d.ts.map +1 -0
- package/lib/services/orderCreator/__test__/stopMarketOrderCreator.test.d.ts +2 -0
- package/lib/services/orderCreator/__test__/stopMarketOrderCreator.test.d.ts.map +1 -0
- package/lib/services/orderCreator/__test__/tpslOrderCreator.test.d.ts +2 -0
- package/lib/services/orderCreator/__test__/tpslOrderCreator.test.d.ts.map +1 -0
- package/lib/services/orderCreator/__test__/tpslPositionOrderCreator.test.d.ts +2 -0
- package/lib/services/orderCreator/__test__/tpslPositionOrderCreator.test.d.ts.map +1 -0
- package/lib/services/orderCreator/baseAlgoCreator.d.ts +22 -0
- package/lib/services/orderCreator/baseAlgoCreator.d.ts.map +1 -0
- package/lib/services/orderCreator/baseAlgoCreator.js +67 -0
- package/lib/services/orderCreator/baseAlgoCreator.js.map +1 -0
- package/lib/services/orderCreator/baseCreator.d.ts +14 -0
- package/lib/services/orderCreator/baseCreator.d.ts.map +1 -0
- package/lib/services/orderCreator/baseCreator.js +102 -0
- package/lib/services/orderCreator/baseCreator.js.map +1 -0
- package/lib/services/orderCreator/factory.d.ts +7 -0
- package/lib/services/orderCreator/factory.d.ts.map +1 -0
- package/lib/services/orderCreator/factory.js +54 -0
- package/lib/services/orderCreator/factory.js.map +1 -0
- package/lib/services/orderCreator/fokCreator.d.ts +4 -0
- package/lib/services/orderCreator/fokCreator.d.ts.map +1 -0
- package/lib/services/orderCreator/fokCreator.js +15 -0
- package/lib/services/orderCreator/fokCreator.js.map +1 -0
- package/lib/services/orderCreator/generalCreator.d.ts +8 -0
- package/lib/services/orderCreator/generalCreator.d.ts.map +1 -0
- package/lib/services/orderCreator/generalCreator.js +25 -0
- package/lib/services/orderCreator/generalCreator.js.map +1 -0
- package/lib/services/orderCreator/interface.d.ts +23 -0
- package/lib/services/orderCreator/interface.d.ts.map +1 -0
- package/lib/services/orderCreator/interface.js +6 -0
- package/lib/services/orderCreator/interface.js.map +1 -0
- package/lib/services/orderCreator/iocCreator.d.ts +4 -0
- package/lib/services/orderCreator/iocCreator.d.ts.map +1 -0
- package/lib/services/orderCreator/iocCreator.js +15 -0
- package/lib/services/orderCreator/iocCreator.js.map +1 -0
- package/lib/services/orderCreator/limitOrderCreator.d.ts +8 -0
- package/lib/services/orderCreator/limitOrderCreator.d.ts.map +1 -0
- package/lib/services/orderCreator/limitOrderCreator.js +79 -0
- package/lib/services/orderCreator/limitOrderCreator.js.map +1 -0
- package/lib/services/orderCreator/marketOrderCreator.d.ts +24 -0
- package/lib/services/orderCreator/marketOrderCreator.d.ts.map +1 -0
- package/lib/services/orderCreator/marketOrderCreator.js +28 -0
- package/lib/services/orderCreator/marketOrderCreator.js.map +1 -0
- package/lib/services/orderCreator/postOnlyCreator.d.ts +4 -0
- package/lib/services/orderCreator/postOnlyCreator.d.ts.map +1 -0
- package/lib/services/orderCreator/postOnlyCreator.js +15 -0
- package/lib/services/orderCreator/postOnlyCreator.js.map +1 -0
- package/lib/services/orderCreator/stopLimitOrderCreator.d.ts +11 -0
- package/lib/services/orderCreator/stopLimitOrderCreator.d.ts.map +1 -0
- package/lib/services/orderCreator/stopLimitOrderCreator.js +93 -0
- package/lib/services/orderCreator/stopLimitOrderCreator.js.map +1 -0
- package/lib/services/orderCreator/stopMarketOrderCreator.d.ts +30 -0
- package/lib/services/orderCreator/stopMarketOrderCreator.d.ts.map +1 -0
- package/lib/services/orderCreator/stopMarketOrderCreator.js +56 -0
- package/lib/services/orderCreator/stopMarketOrderCreator.js.map +1 -0
- package/lib/services/orderCreator/tpslOrderCreator.d.ts +32 -0
- package/lib/services/orderCreator/tpslOrderCreator.d.ts.map +1 -0
- package/lib/services/orderCreator/tpslOrderCreator.js +94 -0
- package/lib/services/orderCreator/tpslOrderCreator.js.map +1 -0
- package/lib/services/orderCreator/tpslPositionOrderCreator.d.ts +33 -0
- package/lib/services/orderCreator/tpslPositionOrderCreator.d.ts.map +1 -0
- package/lib/services/orderCreator/tpslPositionOrderCreator.js +83 -0
- package/lib/services/orderCreator/tpslPositionOrderCreator.js.map +1 -0
- package/lib/services/orderMerge/algoOrderMergeHandler.d.ts +9 -0
- package/lib/services/orderMerge/algoOrderMergeHandler.d.ts.map +1 -0
- package/lib/services/orderMerge/algoOrderMergeHandler.js +48 -0
- package/lib/services/orderMerge/algoOrderMergeHandler.js.map +1 -0
- package/lib/services/orderMerge/baseMergeHandler.d.ts +22 -0
- package/lib/services/orderMerge/baseMergeHandler.d.ts.map +1 -0
- package/lib/services/orderMerge/baseMergeHandler.js +170 -0
- package/lib/services/orderMerge/baseMergeHandler.js.map +1 -0
- package/lib/services/orderMerge/interface.d.ts +8 -0
- package/lib/services/orderMerge/interface.d.ts.map +1 -0
- package/lib/services/orderMerge/interface.js +6 -0
- package/lib/services/orderMerge/interface.js.map +1 -0
- package/lib/services/orderMerge/regularOrderMergeHandler.d.ts +8 -0
- package/lib/services/orderMerge/regularOrderMergeHandler.d.ts.map +1 -0
- package/lib/services/orderMerge/regularOrderMergeHandler.js +25 -0
- package/lib/services/orderMerge/regularOrderMergeHandler.js.map +1 -0
- package/lib/usePoster.d.ts +3 -0
- package/lib/usePoster.d.ts.map +1 -1
- package/lib/usePoster.js +3 -1
- package/lib/usePoster.js.map +1 -1
- package/lib/utils/createOrder.d.ts +0 -55
- package/lib/utils/createOrder.d.ts.map +1 -1
- package/lib/utils/createOrder.js +3 -375
- package/lib/utils/createOrder.js.map +1 -1
- package/lib/utils/fokCreator.d.ts +1 -0
- package/lib/utils/fokCreator.d.ts.map +1 -0
- package/lib/utils/fokCreator.js +3 -0
- package/lib/utils/fokCreator.js.map +1 -0
- package/lib/utils/index.d.ts +5 -0
- package/lib/utils/index.d.ts.map +1 -0
- package/lib/utils/index.js +36 -0
- package/lib/utils/index.js.map +1 -0
- package/lib/utils/order.d.ts +2 -0
- package/lib/utils/order.d.ts.map +1 -0
- package/lib/utils/order.js +6 -0
- package/lib/utils/order.js.map +1 -0
- package/lib/utils/swr.d.ts +3 -1
- package/lib/utils/swr.d.ts.map +1 -1
- package/lib/utils/swr.js +128 -89
- package/lib/utils/swr.js.map +1 -1
- package/lib/utils/ws.d.ts +2 -0
- package/lib/utils/ws.d.ts.map +1 -0
- package/lib/utils/ws.js +19 -0
- package/lib/utils/ws.js.map +1 -0
- package/lib/version.d.ts +1 -1
- package/lib/version.js +2 -2
- package/lib/version.js.map +1 -1
- package/package.json +10 -8
- package/esm/orderly/useOrderStream.d.ts.map +0 -1
- package/esm/orderly/useOrderStream.js.map +0 -1
- package/esm/orderly/usePositionStream.d.ts.map +0 -1
- package/esm/orderly/usePositionStream.js.map +0 -1
- package/lib/orderly/useOrderStream.d.ts.map +0 -1
- package/lib/orderly/useOrderStream.js.map +0 -1
- package/lib/orderly/usePositionStream.d.ts.map +0 -1
- package/lib/orderly/usePositionStream.js.map +0 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { API, AlgoOrderEntity } from "@orderly.network/types";
|
|
2
|
+
export declare const findTPSLFromOrders: (orders: API.AlgoOrder[], symbol: string) => Partial<AlgoOrderEntity> | undefined;
|
|
3
|
+
export declare const findTPSLFromOrder: (order: API.AlgoOrder) => {
|
|
4
|
+
tp_trigger_price?: number | undefined;
|
|
5
|
+
sl_trigger_price?: number | undefined;
|
|
6
|
+
};
|
|
7
|
+
export declare const findPositionTPSLFromOrders: (orders: API.AlgoOrder[], symbol: string) => API.AlgoOrder | undefined;
|
|
8
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/orderly/usePositionStream/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,GAAG,EACH,eAAe,EAIhB,MAAM,wBAAwB,CAAC;AAEhC,eAAO,MAAM,kBAAkB,WACrB,IAAI,SAAS,EAAE,UACf,MAAM,KACb,QAAQ,eAAe,CAAC,GAAG,SAO7B,CAAC;AAEF,eAAO,MAAM,iBAAiB,UACrB,IAAI,SAAS;;;CA6BrB,CAAC;AAEF,eAAO,MAAM,0BAA0B,WAC7B,IAAI,SAAS,EAAE,UACf,MAAM,KACb,IAAI,SAAS,GAAG,SAalB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { AlgoOrderType, AlgoOrderRootType, OrderStatus } from "@orderly.network/types";
|
|
2
|
+
export const findTPSLFromOrders = (orders, symbol)=>{
|
|
3
|
+
const order = findPositionTPSLFromOrders(orders, symbol);
|
|
4
|
+
// console.log("!!!!!", order);
|
|
5
|
+
if (!order) return;
|
|
6
|
+
return findTPSLFromOrder(order);
|
|
7
|
+
};
|
|
8
|
+
export const findTPSLFromOrder = (order)=>{
|
|
9
|
+
let tp_trigger_price;
|
|
10
|
+
let sl_trigger_price;
|
|
11
|
+
const tpOrder = order.child_orders.find((order)=>order.algo_type === AlgoOrderType.TAKE_PROFIT);
|
|
12
|
+
const slOrder = order.child_orders.find((order)=>order.algo_type === AlgoOrderType.STOP_LOSS);
|
|
13
|
+
if (tpOrder) {
|
|
14
|
+
tp_trigger_price = tpOrder.trigger_price;
|
|
15
|
+
// take_profit_qty = tpOrder.quantity ;
|
|
16
|
+
}
|
|
17
|
+
if (slOrder) {
|
|
18
|
+
sl_trigger_price = slOrder.trigger_price;
|
|
19
|
+
// stop_loss_qty = slOrder.quantity;
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
tp_trigger_price,
|
|
23
|
+
sl_trigger_price
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
export const findPositionTPSLFromOrders = (orders, symbol)=>{
|
|
27
|
+
return orders?.find((order)=>{
|
|
28
|
+
// console.log(order.symbol, symbol, order.algo_type);
|
|
29
|
+
return order.symbol === symbol && order.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL && (order.root_algo_status === OrderStatus.NEW || order.root_algo_status === OrderStatus.REPLACED || order.root_algo_status === OrderStatus.PARTIAL_FILLED);
|
|
30
|
+
});
|
|
31
|
+
// return order;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/orderly/usePositionStream/utils.ts"],"sourcesContent":["import {\n API,\n AlgoOrderEntity,\n AlgoOrderType,\n AlgoOrderRootType,\n OrderStatus,\n} from \"@orderly.network/types\";\n\nexport const findTPSLFromOrders = (\n orders: API.AlgoOrder[],\n symbol: string\n): Partial<AlgoOrderEntity> | undefined => {\n const order = findPositionTPSLFromOrders(orders, symbol);\n\n // console.log(\"!!!!!\", order);\n\n if (!order) return;\n return findTPSLFromOrder(order);\n};\n\nexport const findTPSLFromOrder = (\n order: API.AlgoOrder\n): {\n tp_trigger_price?: number;\n sl_trigger_price?: number;\n} => {\n let tp_trigger_price;\n\n let sl_trigger_price;\n\n const tpOrder = order.child_orders.find(\n (order: any) => order.algo_type === AlgoOrderType.TAKE_PROFIT\n );\n const slOrder = order.child_orders.find(\n (order: any) => order.algo_type === AlgoOrderType.STOP_LOSS\n );\n\n if (tpOrder) {\n tp_trigger_price = tpOrder.trigger_price;\n // take_profit_qty = tpOrder.quantity ;\n }\n if (slOrder) {\n sl_trigger_price = slOrder.trigger_price;\n // stop_loss_qty = slOrder.quantity;\n }\n\n return {\n tp_trigger_price,\n sl_trigger_price,\n };\n};\n\nexport const findPositionTPSLFromOrders = (\n orders: API.AlgoOrder[],\n symbol: string\n): API.AlgoOrder | undefined => {\n return orders?.find((order) => {\n // console.log(order.symbol, symbol, order.algo_type);\n return (\n order.symbol === symbol &&\n order.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL &&\n (order.root_algo_status === OrderStatus.NEW ||\n order.root_algo_status === OrderStatus.REPLACED ||\n order.root_algo_status === OrderStatus.PARTIAL_FILLED)\n );\n });\n\n // return order;\n};\n"],"names":["AlgoOrderType","AlgoOrderRootType","OrderStatus","findTPSLFromOrders","orders","symbol","order","findPositionTPSLFromOrders","findTPSLFromOrder","tp_trigger_price","sl_trigger_price","tpOrder","child_orders","find","algo_type","TAKE_PROFIT","slOrder","STOP_LOSS","trigger_price","POSITIONAL_TP_SL","root_algo_status","NEW","REPLACED","PARTIAL_FILLED"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAGEA,aAAa,EACbC,iBAAiB,EACjBC,WAAW,QACN,yBAAyB;AAEhC,OAAO,MAAMC,qBAAqB,CAChCC,QACAC;IAEA,MAAMC,QAAQC,2BAA2BH,QAAQC;IAEjD,+BAA+B;IAE/B,IAAI,CAACC,OAAO;IACZ,OAAOE,kBAAkBF;AAC3B,EAAE;AAEF,OAAO,MAAME,oBAAoB,CAC/BF;IAKA,IAAIG;IAEJ,IAAIC;IAEJ,MAAMC,UAAUL,MAAMM,YAAY,CAACC,IAAI,CACrC,CAACP,QAAeA,MAAMQ,SAAS,KAAKd,cAAce,WAAW;IAE/D,MAAMC,UAAUV,MAAMM,YAAY,CAACC,IAAI,CACrC,CAACP,QAAeA,MAAMQ,SAAS,KAAKd,cAAciB,SAAS;IAG7D,IAAIN,SAAS;QACXF,mBAAmBE,QAAQO,aAAa;IACxC,wCAAwC;IAC1C;IACA,IAAIF,SAAS;QACXN,mBAAmBM,QAAQE,aAAa;IACxC,oCAAoC;IACtC;IAEA,OAAO;QACLT;QACAC;IACF;AACF,EAAE;AAEF,OAAO,MAAMH,6BAA6B,CACxCH,QACAC;IAEA,OAAOD,QAAQS,KAAK,CAACP;QACnB,sDAAsD;QACtD,OACEA,MAAMD,MAAM,KAAKA,UACjBC,MAAMQ,SAAS,KAAKb,kBAAkBkB,gBAAgB,IACrDb,CAAAA,MAAMc,gBAAgB,KAAKlB,YAAYmB,GAAG,IACzCf,MAAMc,gBAAgB,KAAKlB,YAAYoB,QAAQ,IAC/ChB,MAAMc,gBAAgB,KAAKlB,YAAYqB,cAAc,AAAD;IAE1D;AAEA,gBAAgB;AAClB,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePrivateDataObserver.d.ts","sourceRoot":"","sources":["../../src/orderly/usePrivateDataObserver.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"usePrivateDataObserver.d.ts","sourceRoot":"","sources":["../../src/orderly/usePrivateDataObserver.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAMjD,eAAO,MAAM,sBAAsB;uBAEd,MAAM,KAAK,IAAI,MAAM,EAAE,cAAc,CAAC;UAgK1D,CAAC"}
|
|
@@ -1,39 +1,35 @@
|
|
|
1
|
-
import { useEffect
|
|
1
|
+
import { useEffect } from "react";
|
|
2
2
|
import { useWS } from "../useWS";
|
|
3
3
|
import { mutate } from "swr";
|
|
4
4
|
import { useAccount } from "../useAccount";
|
|
5
5
|
import { unstable_serialize } from "swr/infinite";
|
|
6
6
|
import { useEventEmitter } from "../useEventEmitter";
|
|
7
|
-
import { updateOrdersHandler } from "../utils/swr";
|
|
7
|
+
import { updateOrdersHandler, updateAlgoOrdersHandler } from "../utils/swr";
|
|
8
|
+
import { AlgoOrderMergeHandler } from "../services/orderMerge/algoOrderMergeHandler";
|
|
9
|
+
import { object2underscore } from "../utils/ws";
|
|
8
10
|
export const usePrivateDataObserver = (options)=>{
|
|
9
11
|
const ws = useWS();
|
|
10
12
|
// const { mutate } = useSWRConfig();
|
|
11
13
|
const ee = useEventEmitter();
|
|
12
14
|
const { state } = useAccount();
|
|
13
15
|
// TODO: remove this when the WS service provides the correct data
|
|
14
|
-
const algoOrderCacheQuneue = useRef([]);
|
|
16
|
+
// const algoOrderCacheQuneue = useRef<API.AlgoOrder[]>([]);
|
|
15
17
|
const updateOrders = (data, isAlgoOrder)=>{
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
if (isAlgoOrder) {
|
|
19
|
-
/// TODO: remove this when the WS service provides the correct data
|
|
20
|
-
if (algoOrderCacheQuneue.current.length) {
|
|
21
|
-
const index = algoOrderCacheQuneue.current.findIndex((item)=>item.order_id === data.algoOrderId);
|
|
22
|
-
if (index > -1) {
|
|
23
|
-
data = {
|
|
24
|
-
...data,
|
|
25
|
-
...algoOrderCacheQuneue.current[index]
|
|
26
|
-
};
|
|
27
|
-
algoOrderCacheQuneue.current.splice(index, 1);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
map.forEach((getKey, key)=>{
|
|
18
|
+
const keysMap = options.getKeysMap("orders");
|
|
19
|
+
keysMap.forEach((getKey, key)=>{
|
|
32
20
|
mutate(unstable_serialize((index, prevData)=>[
|
|
33
21
|
getKey(index, prevData),
|
|
34
22
|
state.accountId
|
|
35
23
|
]), (prevData)=>{
|
|
36
|
-
|
|
24
|
+
try {
|
|
25
|
+
if (isAlgoOrder) {
|
|
26
|
+
const result = updateAlgoOrdersHandler(key, data, prevData);
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
return updateOrdersHandler(key, data, prevData);
|
|
30
|
+
} catch (error) {
|
|
31
|
+
return prevData;
|
|
32
|
+
}
|
|
37
33
|
}, {
|
|
38
34
|
revalidate: false
|
|
39
35
|
});
|
|
@@ -43,9 +39,10 @@ export const usePrivateDataObserver = (options)=>{
|
|
|
43
39
|
// ...data,
|
|
44
40
|
// status: data.status || (data as WSMessage.AlgoOrder).algoStatus,
|
|
45
41
|
// });
|
|
42
|
+
const formattedData = isAlgoOrder ? AlgoOrderMergeHandler.groupOrders(data) : object2underscore(data);
|
|
46
43
|
ee.emit("orders:changed", {
|
|
47
|
-
...
|
|
48
|
-
status:
|
|
44
|
+
...formattedData,
|
|
45
|
+
status: isAlgoOrder ? formattedData.algo_status : data.status
|
|
49
46
|
});
|
|
50
47
|
};
|
|
51
48
|
// orders
|
|
@@ -65,17 +62,7 @@ export const usePrivateDataObserver = (options)=>{
|
|
|
65
62
|
if (!state.accountId) return;
|
|
66
63
|
const unsubscribe = ws.privateSubscribe("algoexecutionreport", {
|
|
67
64
|
onMessage: (data)=>{
|
|
68
|
-
|
|
69
|
-
if (Array.isArray(data)) {
|
|
70
|
-
data.forEach((item)=>{
|
|
71
|
-
updateOrders(item, true);
|
|
72
|
-
// ee.emit("orders:changed", { ...item, status: item.algoStatus });
|
|
73
|
-
});
|
|
74
|
-
} else {
|
|
75
|
-
updateOrders(data, true);
|
|
76
|
-
// ee.emit("orders:changed", { ...data, status: data.algoStatus });
|
|
77
|
-
}
|
|
78
|
-
}, 100);
|
|
65
|
+
updateOrders(data, true);
|
|
79
66
|
}
|
|
80
67
|
});
|
|
81
68
|
return ()=>unsubscribe?.();
|
|
@@ -138,16 +125,16 @@ export const usePrivateDataObserver = (options)=>{
|
|
|
138
125
|
}, [
|
|
139
126
|
state.accountId
|
|
140
127
|
]);
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
128
|
+
// cache algo orders
|
|
129
|
+
// useEffect(() => {
|
|
130
|
+
// const handler = (data: API.AlgoOrder) => {
|
|
131
|
+
// algoOrderCacheQuneue.current.push(data);
|
|
132
|
+
// };
|
|
133
|
+
// ee.on("algoOrder:cache", handler);
|
|
134
|
+
// return () => {
|
|
135
|
+
// ee.off("algoOrder:cache", handler);
|
|
136
|
+
// };
|
|
137
|
+
// }, []);
|
|
151
138
|
};
|
|
152
139
|
|
|
153
140
|
//# sourceMappingURL=usePrivateDataObserver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/orderly/usePrivateDataObserver.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport { useWS } from \"../useWS\";\nimport { mutate } from \"swr\";\nimport { WSMessage, API } from \"@orderly.network/types\";\nimport { useAccount } from \"../useAccount\";\nimport { unstable_serialize } from \"swr/infinite\";\nimport { useDebouncedCallback } from \"use-debounce\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { getKeyFunction } from \"../dataProvider\";\nimport { parseJSON } from \"../utils/json\";\nimport { updateOrdersHandler } from \"../utils/swr\";\n\nexport const usePrivateDataObserver = (options: {\n // onUpdateOrders: (data: any) => void;\n getKeysMap: (type: string) => Map<string, getKeyFunction>;\n}) => {\n const ws = useWS();\n // const { mutate } = useSWRConfig();\n const ee = useEventEmitter();\n const { state } = useAccount();\n\n // TODO: remove this when the WS service provides the correct data\n const algoOrderCacheQuneue = useRef<API.AlgoOrder[]>([]);\n\n const updateOrders = (\n data: WSMessage.AlgoOrder | WSMessage.Order,\n isAlgoOrder: boolean\n ) => {\n const map = options.getKeysMap(\"orders\");\n\n // console.log(\"$$$$$$$$$$$$\", data, algoOrderCacheQuneue.current);\n\n if (isAlgoOrder) {\n /// TODO: remove this when the WS service provides the correct data\n if (algoOrderCacheQuneue.current.length) {\n const index = algoOrderCacheQuneue.current.findIndex(\n (item: any) =>\n item.order_id === (data as WSMessage.AlgoOrder).algoOrderId\n );\n\n if (index > -1) {\n data = {\n ...data,\n ...algoOrderCacheQuneue.current[index],\n };\n algoOrderCacheQuneue.current.splice(index, 1);\n }\n }\n }\n\n map.forEach((getKey, key) => {\n mutate(\n unstable_serialize((index, prevData) => [\n getKey(index, prevData),\n state.accountId,\n ]),\n (prevData?: any[]) => {\n return updateOrdersHandler(key, data, prevData);\n },\n {\n revalidate: false,\n }\n );\n });\n\n // emit events;\n // ee.emit(\"orders:changed\", {\n // ...data,\n // status: data.status || (data as WSMessage.AlgoOrder).algoStatus,\n // });\n\n ee.emit(\"orders:changed\", {\n ...data,\n status: data.status || (data as WSMessage.AlgoOrder).algoStatus,\n });\n };\n\n // orders\n useEffect(() => {\n if (!state.accountId) return;\n const unsubscribe = ws.privateSubscribe(\"executionreport\", {\n onMessage: (data: any) => {\n updateOrders(data, false);\n },\n });\n\n return () => unsubscribe?.();\n }, [state.accountId]);\n\n // algo orders\n useEffect(() => {\n if (!state.accountId) return;\n const unsubscribe = ws.privateSubscribe(\"algoexecutionreport\", {\n onMessage: (data: any) => {\n setTimeout(() => {\n if (Array.isArray(data)) {\n data.forEach((item) => {\n updateOrders(item, true);\n\n // ee.emit(\"orders:changed\", { ...item, status: item.algoStatus });\n });\n } else {\n updateOrders(data, true);\n // ee.emit(\"orders:changed\", { ...data, status: data.algoStatus });\n }\n }, 100);\n },\n });\n\n return () => unsubscribe?.();\n }, [state.accountId]);\n\n // positions\n useEffect(() => {\n if (!state.accountId) return;\n const key = [\"/v1/positions\", state.accountId];\n const unsubscribe = ws.privateSubscribe(\"position\", {\n onMessage: (data: { positions: WSMessage.Position[] }) => {\n const { positions: nextPostions } = data;\n\n // console.log(\"ws----- positions data-----\", data);\n\n // updatePositions();\n\n mutate(\n key,\n (prevPositions: any) => {\n // return nextPostions;\n if (!!prevPositions) {\n return {\n ...prevPositions,\n rows: prevPositions.rows.map((row: any) => {\n const item = nextPostions.find(\n (item) => item.symbol === row.symbol\n );\n if (item) {\n return {\n symbol: item.symbol,\n position_qty: item.positionQty,\n cost_position: item.costPosition,\n last_sum_unitary_funding: item.lastSumUnitaryFunding,\n pending_long_qty: item.pendingLongQty,\n pending_short_qty: item.pendingShortQty,\n settle_price: item.settlePrice,\n average_open_price: item.averageOpenPrice,\n unsettled_pnl: item.unsettledPnl,\n mark_price: item.markPrice,\n est_liq_price: item.estLiqPrice,\n timestamp: Date.now(),\n imr: item.imr,\n mmr: item.mmr,\n IMR_withdraw_orders: item.imrwithOrders,\n MMR_with_orders: item.mmrwithOrders,\n pnl_24_h: item.pnl24H,\n fee_24_h: item.fee24H,\n };\n }\n\n return row;\n }),\n };\n }\n },\n {\n revalidate: false,\n }\n );\n },\n });\n return () => {\n unsubscribe?.();\n };\n }, [state.accountId]);\n\n // cache algo orders\n useEffect(() => {\n const handler = (data: API.AlgoOrder) => {\n algoOrderCacheQuneue.current.push(data);\n };\n\n ee.on(\"algoOrder:cache\", handler);\n\n return () => {\n ee.off(\"algoOrder:cache\", handler);\n };\n }, []);\n};\n"],"names":["useEffect","useRef","useWS","mutate","useAccount","unstable_serialize","useEventEmitter","updateOrdersHandler","usePrivateDataObserver","options","ws","ee","state","algoOrderCacheQuneue","updateOrders","data","isAlgoOrder","map","getKeysMap","current","length","index","findIndex","item","order_id","algoOrderId","splice","forEach","getKey","key","prevData","accountId","revalidate","emit","status","algoStatus","unsubscribe","privateSubscribe","onMessage","setTimeout","Array","isArray","positions","nextPostions","prevPositions","rows","row","find","symbol","position_qty","positionQty","cost_position","costPosition","last_sum_unitary_funding","lastSumUnitaryFunding","pending_long_qty","pendingLongQty","pending_short_qty","pendingShortQty","settle_price","settlePrice","average_open_price","averageOpenPrice","unsettled_pnl","unsettledPnl","mark_price","markPrice","est_liq_price","estLiqPrice","timestamp","Date","now","imr","mmr","IMR_withdraw_orders","imrwithOrders","MMR_with_orders","mmrwithOrders","pnl_24_h","pnl24H","fee_24_h","fee24H","handler","push","on","off"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,SAAS,EAAEC,MAAM,QAAQ,QAAQ;AAC1C,SAASC,KAAK,QAAQ,WAAW;AACjC,SAASC,MAAM,QAAQ,MAAM;AAE7B,SAASC,UAAU,QAAQ,gBAAgB;AAC3C,SAASC,kBAAkB,QAAQ,eAAe;AAElD,SAASC,eAAe,QAAQ,qBAAqB;AAGrD,SAASC,mBAAmB,QAAQ,eAAe;AAEnD,OAAO,MAAMC,yBAAyB,CAACC;IAIrC,MAAMC,KAAKR;IACX,qCAAqC;IACrC,MAAMS,KAAKL;IACX,MAAM,EAAEM,KAAK,EAAE,GAAGR;IAElB,kEAAkE;IAClE,MAAMS,uBAAuBZ,OAAwB,EAAE;IAEvD,MAAMa,eAAe,CACnBC,MACAC;QAEA,MAAMC,MAAMR,QAAQS,UAAU,CAAC;QAE/B,mEAAmE;QAEnE,IAAIF,aAAa;YACf,mEAAmE;YACnE,IAAIH,qBAAqBM,OAAO,CAACC,MAAM,EAAE;gBACvC,MAAMC,QAAQR,qBAAqBM,OAAO,CAACG,SAAS,CAClD,CAACC,OACCA,KAAKC,QAAQ,KAAK,AAACT,KAA6BU,WAAW;gBAG/D,IAAIJ,QAAQ,CAAC,GAAG;oBACdN,OAAO;wBACL,GAAGA,IAAI;wBACP,GAAGF,qBAAqBM,OAAO,CAACE,MAAM;oBACxC;oBACAR,qBAAqBM,OAAO,CAACO,MAAM,CAACL,OAAO;gBAC7C;YACF;QACF;QAEAJ,IAAIU,OAAO,CAAC,CAACC,QAAQC;YACnB1B,OACEE,mBAAmB,CAACgB,OAAOS,WAAa;oBACtCF,OAAOP,OAAOS;oBACdlB,MAAMmB,SAAS;iBAChB,GACD,CAACD;gBACC,OAAOvB,oBAAoBsB,KAAKd,MAAMe;YACxC,GACA;gBACEE,YAAY;YACd;QAEJ;QAEA,gBAAgB;QAChB,8BAA8B;QAC9B,aAAa;QACb,qEAAqE;QACrE,MAAM;QAENrB,GAAGsB,IAAI,CAAC,kBAAkB;YACxB,GAAGlB,IAAI;YACPmB,QAAQnB,KAAKmB,MAAM,IAAI,AAACnB,KAA6BoB,UAAU;QACjE;IACF;IAEA,SAAS;IACTnC,UAAU;QACR,IAAI,CAACY,MAAMmB,SAAS,EAAE;QACtB,MAAMK,cAAc1B,GAAG2B,gBAAgB,CAAC,mBAAmB;YACzDC,WAAW,CAACvB;gBACVD,aAAaC,MAAM;YACrB;QACF;QAEA,OAAO,IAAMqB;IACf,GAAG;QAACxB,MAAMmB,SAAS;KAAC;IAEpB,cAAc;IACd/B,UAAU;QACR,IAAI,CAACY,MAAMmB,SAAS,EAAE;QACtB,MAAMK,cAAc1B,GAAG2B,gBAAgB,CAAC,uBAAuB;YAC7DC,WAAW,CAACvB;gBACVwB,WAAW;oBACT,IAAIC,MAAMC,OAAO,CAAC1B,OAAO;wBACvBA,KAAKY,OAAO,CAAC,CAACJ;4BACZT,aAAaS,MAAM;wBAEnB,mEAAmE;wBACrE;oBACF,OAAO;wBACLT,aAAaC,MAAM;oBACnB,mEAAmE;oBACrE;gBACF,GAAG;YACL;QACF;QAEA,OAAO,IAAMqB;IACf,GAAG;QAACxB,MAAMmB,SAAS;KAAC;IAEpB,YAAY;IACZ/B,UAAU;QACR,IAAI,CAACY,MAAMmB,SAAS,EAAE;QACtB,MAAMF,MAAM;YAAC;YAAiBjB,MAAMmB,SAAS;SAAC;QAC9C,MAAMK,cAAc1B,GAAG2B,gBAAgB,CAAC,YAAY;YAClDC,WAAW,CAACvB;gBACV,MAAM,EAAE2B,WAAWC,YAAY,EAAE,GAAG5B;gBAEpC,oDAAoD;gBAEpD,qBAAqB;gBAErBZ,OACE0B,KACA,CAACe;oBACC,uBAAuB;oBACvB,IAAI,CAAC,CAACA,eAAe;wBACnB,OAAO;4BACL,GAAGA,aAAa;4BAChBC,MAAMD,cAAcC,IAAI,CAAC5B,GAAG,CAAC,CAAC6B;gCAC5B,MAAMvB,OAAOoB,aAAaI,IAAI,CAC5B,CAACxB,OAASA,KAAKyB,MAAM,KAAKF,IAAIE,MAAM;gCAEtC,IAAIzB,MAAM;oCACR,OAAO;wCACLyB,QAAQzB,KAAKyB,MAAM;wCACnBC,cAAc1B,KAAK2B,WAAW;wCAC9BC,eAAe5B,KAAK6B,YAAY;wCAChCC,0BAA0B9B,KAAK+B,qBAAqB;wCACpDC,kBAAkBhC,KAAKiC,cAAc;wCACrCC,mBAAmBlC,KAAKmC,eAAe;wCACvCC,cAAcpC,KAAKqC,WAAW;wCAC9BC,oBAAoBtC,KAAKuC,gBAAgB;wCACzCC,eAAexC,KAAKyC,YAAY;wCAChCC,YAAY1C,KAAK2C,SAAS;wCAC1BC,eAAe5C,KAAK6C,WAAW;wCAC/BC,WAAWC,KAAKC,GAAG;wCACnBC,KAAKjD,KAAKiD,GAAG;wCACbC,KAAKlD,KAAKkD,GAAG;wCACbC,qBAAqBnD,KAAKoD,aAAa;wCACvCC,iBAAiBrD,KAAKsD,aAAa;wCACnCC,UAAUvD,KAAKwD,MAAM;wCACrBC,UAAUzD,KAAK0D,MAAM;oCACvB;gCACF;gCAEA,OAAOnC;4BACT;wBACF;oBACF;gBACF,GACA;oBACEd,YAAY;gBACd;YAEJ;QACF;QACA,OAAO;YACLI;QACF;IACF,GAAG;QAACxB,MAAMmB,SAAS;KAAC;IAEpB,oBAAoB;IACpB/B,UAAU;QACR,MAAMkF,UAAU,CAACnE;YACfF,qBAAqBM,OAAO,CAACgE,IAAI,CAACpE;QACpC;QAEAJ,GAAGyE,EAAE,CAAC,mBAAmBF;QAEzB,OAAO;YACLvE,GAAG0E,GAAG,CAAC,mBAAmBH;QAC5B;IACF,GAAG,EAAE;AACP,EAAE"}
|
|
1
|
+
{"version":3,"sources":["../../src/orderly/usePrivateDataObserver.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport { useWS } from \"../useWS\";\nimport { mutate } from \"swr\";\nimport { WSMessage, API } from \"@orderly.network/types\";\nimport { useAccount } from \"../useAccount\";\nimport { unstable_serialize } from \"swr/infinite\";\nimport { useDebouncedCallback } from \"use-debounce\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { getKeyFunction } from \"../dataProvider\";\nimport { parseJSON } from \"../utils/json\";\nimport { updateOrdersHandler, updateAlgoOrdersHandler } from \"../utils/swr\";\nimport { AlgoOrderMergeHandler } from \"../services/orderMerge/algoOrderMergeHandler\";\nimport { object2underscore } from \"../utils/ws\";\n\nexport const usePrivateDataObserver = (options: {\n // onUpdateOrders: (data: any) => void;\n getKeysMap: (type: string) => Map<string, getKeyFunction>;\n}) => {\n const ws = useWS();\n // const { mutate } = useSWRConfig();\n const ee = useEventEmitter();\n const { state } = useAccount();\n\n // TODO: remove this when the WS service provides the correct data\n // const algoOrderCacheQuneue = useRef<API.AlgoOrder[]>([]);\n\n const updateOrders = (\n data: WSMessage.AlgoOrder[] | WSMessage.Order,\n isAlgoOrder: boolean\n ) => {\n const keysMap = options.getKeysMap(\"orders\");\n\n keysMap.forEach((getKey, key) => {\n mutate(\n unstable_serialize((index, prevData) => [\n getKey(index, prevData),\n state.accountId,\n ]),\n (prevData?: any[]) => {\n try {\n if (isAlgoOrder) {\n const result = updateAlgoOrdersHandler(\n key,\n data as WSMessage.AlgoOrder[],\n prevData!\n );\n\n return result;\n }\n return updateOrdersHandler(key, data as WSMessage.Order, prevData);\n } catch (error) {\n return prevData;\n }\n },\n {\n revalidate: false,\n }\n );\n });\n\n // emit events;\n // ee.emit(\"orders:changed\", {\n // ...data,\n // status: data.status || (data as WSMessage.AlgoOrder).algoStatus,\n // });\n\n const formattedData = isAlgoOrder\n ? AlgoOrderMergeHandler.groupOrders(data as WSMessage.AlgoOrder[])\n : object2underscore(data);\n\n ee.emit(\"orders:changed\", {\n ...formattedData,\n status: isAlgoOrder\n ? formattedData.algo_status\n : (data as WSMessage.Order).status,\n });\n };\n\n // orders\n useEffect(() => {\n if (!state.accountId) return;\n const unsubscribe = ws.privateSubscribe(\"executionreport\", {\n onMessage: (data: any) => {\n updateOrders(data, false);\n },\n });\n\n return () => unsubscribe?.();\n }, [state.accountId]);\n\n // algo orders\n useEffect(() => {\n if (!state.accountId) return;\n const unsubscribe = ws.privateSubscribe(\"algoexecutionreport\", {\n onMessage: (data: any) => {\n updateOrders(data, true);\n },\n });\n\n return () => unsubscribe?.();\n }, [state.accountId]);\n\n // positions\n useEffect(() => {\n if (!state.accountId) return;\n const key = [\"/v1/positions\", state.accountId];\n const unsubscribe = ws.privateSubscribe(\"position\", {\n onMessage: (data: { positions: WSMessage.Position[] }) => {\n const { positions: nextPostions } = data;\n\n // console.log(\"ws----- positions data-----\", data);\n\n // updatePositions();\n\n mutate(\n key,\n (prevPositions: any) => {\n // return nextPostions;\n if (!!prevPositions) {\n return {\n ...prevPositions,\n rows: prevPositions.rows.map((row: any) => {\n const item = nextPostions.find(\n (item) => item.symbol === row.symbol\n );\n if (item) {\n return {\n symbol: item.symbol,\n position_qty: item.positionQty,\n cost_position: item.costPosition,\n last_sum_unitary_funding: item.lastSumUnitaryFunding,\n pending_long_qty: item.pendingLongQty,\n pending_short_qty: item.pendingShortQty,\n settle_price: item.settlePrice,\n average_open_price: item.averageOpenPrice,\n unsettled_pnl: item.unsettledPnl,\n mark_price: item.markPrice,\n est_liq_price: item.estLiqPrice,\n timestamp: Date.now(),\n imr: item.imr,\n mmr: item.mmr,\n IMR_withdraw_orders: item.imrwithOrders,\n MMR_with_orders: item.mmrwithOrders,\n pnl_24_h: item.pnl24H,\n fee_24_h: item.fee24H,\n };\n }\n\n return row;\n }),\n };\n }\n },\n {\n revalidate: false,\n }\n );\n },\n });\n return () => {\n unsubscribe?.();\n };\n }, [state.accountId]);\n\n // cache algo orders\n // useEffect(() => {\n // const handler = (data: API.AlgoOrder) => {\n // algoOrderCacheQuneue.current.push(data);\n // };\n\n // ee.on(\"algoOrder:cache\", handler);\n\n // return () => {\n // ee.off(\"algoOrder:cache\", handler);\n // };\n // }, []);\n};\n"],"names":["useEffect","useWS","mutate","useAccount","unstable_serialize","useEventEmitter","updateOrdersHandler","updateAlgoOrdersHandler","AlgoOrderMergeHandler","object2underscore","usePrivateDataObserver","options","ws","ee","state","updateOrders","data","isAlgoOrder","keysMap","getKeysMap","forEach","getKey","key","index","prevData","accountId","result","error","revalidate","formattedData","groupOrders","emit","status","algo_status","unsubscribe","privateSubscribe","onMessage","positions","nextPostions","prevPositions","rows","map","row","item","find","symbol","position_qty","positionQty","cost_position","costPosition","last_sum_unitary_funding","lastSumUnitaryFunding","pending_long_qty","pendingLongQty","pending_short_qty","pendingShortQty","settle_price","settlePrice","average_open_price","averageOpenPrice","unsettled_pnl","unsettledPnl","mark_price","markPrice","est_liq_price","estLiqPrice","timestamp","Date","now","imr","mmr","IMR_withdraw_orders","imrwithOrders","MMR_with_orders","mmrwithOrders","pnl_24_h","pnl24H","fee_24_h","fee24H"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=useTakeProfitAndStopLoss.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTakeProfitAndStopLoss.test.d.ts","sourceRoot":"","sources":["../../../../src/orderly/useTakeProfitAndStopLoss/__test__/useTakeProfitAndStopLoss.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../../../../src/orderly/useTakeProfitAndStopLoss/__test__/utils.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,32 @@
|
|
|
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?: {
|
|
3
|
+
/**
|
|
4
|
+
* You can set the default value for the take profit and stop loss order,
|
|
5
|
+
* it is usually used when editing order
|
|
6
|
+
*/
|
|
7
|
+
defaultOrder?: API.AlgoOrder;
|
|
8
|
+
}) => [Partial<import("@orderly.network/types").Optional<import("@orderly.network/types").BaseAlgoOrderEntity<import("@orderly.network/types").AlgoOrderRootType.TP_SL & {
|
|
9
|
+
tp_pnl: number;
|
|
10
|
+
tp_offset: number;
|
|
11
|
+
tp_offset_percentage: number;
|
|
12
|
+
sl_pnl: number;
|
|
13
|
+
sl_offset: number;
|
|
14
|
+
sl_offset_percentage: number;
|
|
15
|
+
}>, "type" | "side" | "order_type" | "trigger_price">>, {
|
|
16
|
+
setValue: (key: string, value: string | number) => void;
|
|
17
|
+
setValues: (values: Partial<Partial<import("@orderly.network/types").Optional<import("@orderly.network/types").BaseAlgoOrderEntity<import("@orderly.network/types").AlgoOrderRootType.TP_SL & {
|
|
18
|
+
tp_pnl: number;
|
|
19
|
+
tp_offset: number;
|
|
20
|
+
tp_offset_percentage: number;
|
|
21
|
+
sl_pnl: number;
|
|
22
|
+
sl_offset: number;
|
|
23
|
+
sl_offset_percentage: number;
|
|
24
|
+
}>, "type" | "side" | "order_type" | "trigger_price">>>) => void;
|
|
25
|
+
submit: () => Promise<void>;
|
|
26
|
+
create: () => Promise<void>;
|
|
27
|
+
update: (orderId: number) => Promise<any>;
|
|
28
|
+
errors: import("./useTPSL").ValidateError | null;
|
|
29
|
+
validate: () => Promise<AlgoOrderEntity<import("@orderly.network/types").AlgoOrderRootType.TP_SL | import("@orderly.network/types").AlgoOrderRootType.POSITIONAL_TP_SL>>;
|
|
30
|
+
}];
|
|
31
|
+
export type { ComputedAlgoOrder } from "./useTPSL";
|
|
32
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { SDKError } from "@orderly.network/types";
|
|
2
|
+
import { useTaskProfitAndStopLossInternal } from "./useTPSL";
|
|
3
|
+
export const useStopOrder = (/**
|
|
4
|
+
* Position that needs to set take profit and stop loss
|
|
5
|
+
*/ position, options)=>{
|
|
6
|
+
if (!position) {
|
|
7
|
+
throw new SDKError("Position is required");
|
|
8
|
+
}
|
|
9
|
+
if (!position.symbol) {
|
|
10
|
+
throw new SDKError("Symbol is required");
|
|
11
|
+
}
|
|
12
|
+
if (typeof position.average_open_price === "undefined") {
|
|
13
|
+
throw new SDKError("Average open price is required");
|
|
14
|
+
}
|
|
15
|
+
if (typeof position.position_qty === "undefined") {
|
|
16
|
+
throw new SDKError("Position quantity is required");
|
|
17
|
+
}
|
|
18
|
+
// const { data: markPrice } = useMarkPrice(position.symbol);
|
|
19
|
+
const result = useTaskProfitAndStopLossInternal(position, options);
|
|
20
|
+
return result;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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":["SDKError","useTaskProfitAndStopLossInternal","useStopOrder","position","options","symbol","average_open_price","position_qty","result"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAA+BA,QAAQ,QAAQ,yBAAyB;AACxE,SAASC,gCAAgC,QAAQ,YAAY;AAG7D,OAAO,MAAMC,eAAe,CAC1B;;GAEC,GACDC,UAEAC;IAQA,IAAI,CAACD,UAAU;QACb,MAAM,IAAIH,SAAS;IACrB;IAEA,IAAI,CAACG,SAASE,MAAM,EAAE;QACpB,MAAM,IAAIL,SAAS;IACrB;IAEA,IAAI,OAAOG,SAASG,kBAAkB,KAAK,aAAa;QACtD,MAAM,IAAIN,SAAS;IACrB;IAEA,IAAI,OAAOG,SAASI,YAAY,KAAK,aAAa;QAChD,MAAM,IAAIP,SAAS;IACrB;IAEA,6DAA6D;IAE7D,MAAMQ,SAASP,iCAAiCE,UAAUC;IAE1D,OAAOI;AACT,EAAE"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { API, AlgoOrderEntity } from "@orderly.network/types";
|
|
2
|
+
import { AlgoOrderRootType } from "@orderly.network/types";
|
|
3
|
+
export type ComputedAlgoOrder = Partial<AlgoOrderEntity<AlgoOrderRootType.TP_SL & {
|
|
4
|
+
/**
|
|
5
|
+
* Computed take profit
|
|
6
|
+
*/
|
|
7
|
+
tp_pnl: number;
|
|
8
|
+
tp_offset: number;
|
|
9
|
+
tp_offset_percentage: number;
|
|
10
|
+
/**
|
|
11
|
+
* Computed stop loss
|
|
12
|
+
*/
|
|
13
|
+
sl_pnl: number;
|
|
14
|
+
sl_offset: number;
|
|
15
|
+
sl_offset_percentage: number;
|
|
16
|
+
}>>;
|
|
17
|
+
export type ValidateError = {
|
|
18
|
+
[P in keyof ComputedAlgoOrder]?: {
|
|
19
|
+
type: string;
|
|
20
|
+
message: string;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* @hidden
|
|
25
|
+
*/
|
|
26
|
+
export declare const useTaskProfitAndStopLossInternal: (position: Partial<API.PositionTPSLExt> & Pick<API.PositionTPSLExt, "symbol" | "average_open_price" | "position_qty">, options?: {
|
|
27
|
+
defaultOrder?: API.AlgoOrder;
|
|
28
|
+
}) => [Partial<import("@orderly.network/types").Optional<import("@orderly.network/types").BaseAlgoOrderEntity<AlgoOrderRootType.TP_SL & {
|
|
29
|
+
/**
|
|
30
|
+
* Computed take profit
|
|
31
|
+
*/
|
|
32
|
+
tp_pnl: number;
|
|
33
|
+
tp_offset: number;
|
|
34
|
+
tp_offset_percentage: number;
|
|
35
|
+
/**
|
|
36
|
+
* Computed stop loss
|
|
37
|
+
*/
|
|
38
|
+
sl_pnl: number;
|
|
39
|
+
sl_offset: number;
|
|
40
|
+
sl_offset_percentage: number;
|
|
41
|
+
}>, "type" | "side" | "order_type" | "trigger_price">>, {
|
|
42
|
+
/**
|
|
43
|
+
* Update the take profit and stop loss order, this will merge the new data with the old one
|
|
44
|
+
*/
|
|
45
|
+
setValue: (key: string, value: number | string) => void;
|
|
46
|
+
setValues: (values: Partial<ComputedAlgoOrder>) => void;
|
|
47
|
+
/**
|
|
48
|
+
* Submit the take profit and stop loss order
|
|
49
|
+
*/
|
|
50
|
+
submit: () => Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Create the take profit and stop loss order, auto-detect the order type
|
|
53
|
+
*/
|
|
54
|
+
create: () => Promise<void>;
|
|
55
|
+
update: (orderId: number) => Promise<any>;
|
|
56
|
+
errors: ValidateError | null;
|
|
57
|
+
validate: () => Promise<AlgoOrderEntity<AlgoOrderRootType.POSITIONAL_TP_SL | AlgoOrderRootType.TP_SL>>;
|
|
58
|
+
}];
|
|
59
|
+
//# sourceMappingURL=useTPSL.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { useEffect, useState } from "react";
|
|
2
|
+
import { OrderSide, SDKError } from "@orderly.network/types";
|
|
3
|
+
import { calculateHelper } from "./utils";
|
|
4
|
+
import { useMutation } from "../../useMutation";
|
|
5
|
+
import { OrderFactory } from "../../services/orderCreator/factory";
|
|
6
|
+
import { AlgoOrderRootType } from "@orderly.network/types";
|
|
7
|
+
import { findTPSLFromOrder } from "../usePositionStream/utils";
|
|
8
|
+
import { useSymbolsInfo } from "../useSymbolsInfo";
|
|
9
|
+
import { useMarkPrice } from "../useMarkPrice";
|
|
10
|
+
import { omit } from "ramda";
|
|
11
|
+
/**
|
|
12
|
+
* @hidden
|
|
13
|
+
*/ export const useTaskProfitAndStopLossInternal = (position, options)=>{
|
|
14
|
+
const [order, setOrder] = useState({
|
|
15
|
+
algo_order_id: options?.defaultOrder?.algo_order_id,
|
|
16
|
+
symbol: position.symbol,
|
|
17
|
+
side: Number(position.position_qty) > 0 ? OrderSide.BUY : OrderSide.SELL,
|
|
18
|
+
quantity: options?.defaultOrder?.quantity || Math.abs(position.position_qty),
|
|
19
|
+
algo_type: options?.defaultOrder?.algo_type
|
|
20
|
+
});
|
|
21
|
+
const symbolInfo = useSymbolsInfo()[position.symbol]();
|
|
22
|
+
const { data: markPrice } = useMarkPrice(order.symbol);
|
|
23
|
+
const [doCreateOrder] = useMutation("/v1/algo/order");
|
|
24
|
+
const [doUpdateOrder] = useMutation("/v1/algo/order", "PUT");
|
|
25
|
+
const [doDeleteOrder] = useMutation("/v1/algo/order", "DELETE");
|
|
26
|
+
const [errors, setErrors] = useState(null);
|
|
27
|
+
useEffect(()=>{
|
|
28
|
+
if (!options?.defaultOrder) return;
|
|
29
|
+
const trigger_prices = findTPSLFromOrder(options.defaultOrder);
|
|
30
|
+
if (trigger_prices.tp_trigger_price) {
|
|
31
|
+
setOrderValue("tp_trigger_price", trigger_prices.tp_trigger_price, {
|
|
32
|
+
ignoreValidate: true
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
if (trigger_prices.sl_trigger_price) {
|
|
36
|
+
setOrderValue("sl_trigger_price", trigger_prices.sl_trigger_price, {
|
|
37
|
+
ignoreValidate: true
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}, []);
|
|
41
|
+
const _setOrderValue = (key, value, options)=>{
|
|
42
|
+
;
|
|
43
|
+
setOrder((prev)=>{
|
|
44
|
+
const side = position.position_qty > 0 ? OrderSide.BUY : OrderSide.SELL;
|
|
45
|
+
if (key === "sl_pnl") {
|
|
46
|
+
value = value ? `-${value}` : "";
|
|
47
|
+
}
|
|
48
|
+
const newValue = calculateHelper(key, {
|
|
49
|
+
key,
|
|
50
|
+
value,
|
|
51
|
+
entryPrice: position.average_open_price,
|
|
52
|
+
qty: side === OrderSide.BUY ? Number(prev.quantity) : -Number(prev.quantity),
|
|
53
|
+
orderSide: side
|
|
54
|
+
}, {
|
|
55
|
+
symbol: symbolInfo
|
|
56
|
+
});
|
|
57
|
+
;
|
|
58
|
+
return {
|
|
59
|
+
...prev,
|
|
60
|
+
...newValue,
|
|
61
|
+
ignoreValidate: options?.ignoreValidate
|
|
62
|
+
};
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
const setOrderValue = async (key, value, options)=>{
|
|
66
|
+
if (key === "quantity") {
|
|
67
|
+
setOrder((prev)=>({
|
|
68
|
+
...prev,
|
|
69
|
+
quantity: value
|
|
70
|
+
}));
|
|
71
|
+
if (typeof order.sl_trigger_price !== "undefined") {
|
|
72
|
+
_setOrderValue("sl_trigger_price", order.sl_trigger_price, {
|
|
73
|
+
ignoreValidate: true
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
if (typeof order.tp_trigger_price !== "undefined") {
|
|
77
|
+
_setOrderValue("tp_trigger_price", order.tp_trigger_price, {
|
|
78
|
+
ignoreValidate: true
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
_setOrderValue(key, value, options);
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* calculate value config
|
|
87
|
+
*/ const valueConfig = {
|
|
88
|
+
symbol: symbolInfo,
|
|
89
|
+
maxQty: Math.abs(position.position_qty),
|
|
90
|
+
markPrice
|
|
91
|
+
};
|
|
92
|
+
// auto validate when order changed
|
|
93
|
+
useEffect(()=>{
|
|
94
|
+
requestAnimationFrame(()=>{
|
|
95
|
+
if (order.ignoreValidate) return;
|
|
96
|
+
const orderCreator = getOrderCreator();
|
|
97
|
+
orderCreator.validate(order, valueConfig).then((errors)=>{
|
|
98
|
+
setErrors(errors);
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
}, [
|
|
102
|
+
order,
|
|
103
|
+
valueConfig.markPrice,
|
|
104
|
+
order.quantity
|
|
105
|
+
]);
|
|
106
|
+
const setValues = (values)=>{
|
|
107
|
+
const keys = Object.keys(values);
|
|
108
|
+
keys.forEach((key)=>{
|
|
109
|
+
setOrderValue(key, values[key]);
|
|
110
|
+
});
|
|
111
|
+
};
|
|
112
|
+
const validate = ()=>{
|
|
113
|
+
const orderCreator = getOrderCreator();
|
|
114
|
+
return new Promise((resolve, reject)=>{
|
|
115
|
+
return orderCreator.validate(order, valueConfig).then((errors)=>{
|
|
116
|
+
;
|
|
117
|
+
if (errors) {
|
|
118
|
+
setErrors(errors);
|
|
119
|
+
return reject(errors);
|
|
120
|
+
}
|
|
121
|
+
resolve(orderCreator.create(order, valueConfig));
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
};
|
|
125
|
+
useEffect(()=>{
|
|
126
|
+
// setError(validate());
|
|
127
|
+
}, [
|
|
128
|
+
order
|
|
129
|
+
]);
|
|
130
|
+
const compare = ()=>{
|
|
131
|
+
const quantityNum = Number(order.quantity);
|
|
132
|
+
if (isNaN(quantityNum)) return false;
|
|
133
|
+
return quantityNum === Math.abs(Number(position.position_qty));
|
|
134
|
+
};
|
|
135
|
+
const getOrderCreator = ()=>{
|
|
136
|
+
// if the order is existed, and the order type is POSITIONAL_TP_SL, always return POSITIONAL_TP_SL
|
|
137
|
+
// else use qty to determine the order type
|
|
138
|
+
if (options?.defaultOrder?.algo_type === AlgoOrderRootType.TP_SL) {
|
|
139
|
+
return OrderFactory.create(AlgoOrderRootType.TP_SL);
|
|
140
|
+
}
|
|
141
|
+
return OrderFactory.create(compare() ? AlgoOrderRootType.POSITIONAL_TP_SL : AlgoOrderRootType.TP_SL);
|
|
142
|
+
};
|
|
143
|
+
const submit = async ()=>{
|
|
144
|
+
const defaultOrder = options?.defaultOrder;
|
|
145
|
+
const orderId = defaultOrder?.algo_order_id;
|
|
146
|
+
const algoType = defaultOrder?.algo_type;
|
|
147
|
+
// if algo_order_id is not existed, create new order
|
|
148
|
+
if (!orderId) {
|
|
149
|
+
return createOrder();
|
|
150
|
+
}
|
|
151
|
+
// if algo_order_id is existed and algoType = POSITION_TP_SL
|
|
152
|
+
if (algoType === AlgoOrderRootType.POSITIONAL_TP_SL) {
|
|
153
|
+
// if order.qty = position.qty, update order
|
|
154
|
+
if (compare()) {
|
|
155
|
+
return updateOrder(orderId);
|
|
156
|
+
}
|
|
157
|
+
// if order.qty != position.qty, create new tp/sl order
|
|
158
|
+
return createOrder();
|
|
159
|
+
}
|
|
160
|
+
// if algo_order_id is existed and algoType = TP_SL, delete order and create new order
|
|
161
|
+
return updateOrder(orderId);
|
|
162
|
+
};
|
|
163
|
+
const createOrder = ()=>{
|
|
164
|
+
const orderCreator = getOrderCreator();
|
|
165
|
+
const orderBody = orderCreator.create(order, valueConfig);
|
|
166
|
+
if (orderBody.child_orders.length === 0) {
|
|
167
|
+
throw new SDKError("No child orders");
|
|
168
|
+
}
|
|
169
|
+
return doCreateOrder(orderBody);
|
|
170
|
+
};
|
|
171
|
+
const deleteOrder = (orderId, symbol)=>{
|
|
172
|
+
return doDeleteOrder(null, {
|
|
173
|
+
order_id: orderId,
|
|
174
|
+
symbol
|
|
175
|
+
});
|
|
176
|
+
};
|
|
177
|
+
const updateOrder = (orderId)=>{
|
|
178
|
+
const orderCreator = getOrderCreator();
|
|
179
|
+
const [updatedOrderEntity, orderEntity] = orderCreator.crateUpdateOrder(// @ts-ignore
|
|
180
|
+
order, options?.defaultOrder, valueConfig);
|
|
181
|
+
if (updatedOrderEntity.child_orders.length === 0) {
|
|
182
|
+
return Promise.resolve("Not any order needs to update");
|
|
183
|
+
}
|
|
184
|
+
const needDelete = orderEntity.child_orders.filter((order)=>typeof order.is_activated === "boolean" && !order.is_activated).length === 2;
|
|
185
|
+
if (needDelete) {
|
|
186
|
+
return deleteOrder(orderId, order.symbol);
|
|
187
|
+
}
|
|
188
|
+
return doUpdateOrder({
|
|
189
|
+
order_id: orderId,
|
|
190
|
+
...updatedOrderEntity
|
|
191
|
+
});
|
|
192
|
+
};
|
|
193
|
+
return [
|
|
194
|
+
omit([
|
|
195
|
+
"ignoreValidate"
|
|
196
|
+
], order),
|
|
197
|
+
{
|
|
198
|
+
submit,
|
|
199
|
+
create: submit,
|
|
200
|
+
update: updateOrder,
|
|
201
|
+
setValue: setOrderValue,
|
|
202
|
+
setValues,
|
|
203
|
+
// createPositionTPSL: submit,
|
|
204
|
+
// createTPSL: submit,
|
|
205
|
+
validate,
|
|
206
|
+
errors
|
|
207
|
+
}
|
|
208
|
+
];
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
//# sourceMappingURL=useTPSL.js.map
|
|
@@ -0,0 +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":["useEffect","useState","OrderSide","SDKError","calculateHelper","useMutation","OrderFactory","AlgoOrderRootType","findTPSLFromOrder","useSymbolsInfo","useMarkPrice","omit","useTaskProfitAndStopLossInternal","position","options","order","setOrder","algo_order_id","defaultOrder","symbol","side","Number","position_qty","BUY","SELL","quantity","Math","abs","algo_type","symbolInfo","data","markPrice","doCreateOrder","doUpdateOrder","doDeleteOrder","errors","setErrors","trigger_prices","tp_trigger_price","setOrderValue","ignoreValidate","sl_trigger_price","_setOrderValue","key","value","prev","newValue","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","TP_SL","POSITIONAL_TP_SL","submit","orderId","algoType","createOrder","updateOrder","orderBody","child_orders","length","deleteOrder","order_id","updatedOrderEntity","orderEntity","crateUpdateOrder","needDelete","filter","is_activated","update","setValue"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,QAAQ;AAE5C,SAGEC,SAAS,EACTC,QAAQ,QACH,yBAAyB;AAChC,SAAyBC,eAAe,QAAQ,UAAU;AAC1D,SAASC,WAAW,QAAQ,oBAAoB;AAChD,SAASC,YAAY,QAAQ,sCAAsC;AACnE,SAASC,iBAAiB,QAAQ,yBAAyB;AAE3D,SAASC,iBAAiB,QAAQ,6BAA6B;AAC/D,SAASC,cAAc,QAAQ,oBAAoB;AACnD,SAASC,YAAY,QAAQ,kBAAkB;AAC/C,SAASC,IAAI,QAAQ,QAAQ;AA6B7B;;CAEC,GACD,OAAO,MAAMC,mCAAmC,CAC9CC,UAEAC;IA6BA,MAAM,CAACC,OAAOC,SAAS,GAAGf,SAIxB;QACAgB,eAAeH,SAASI,cAAcD;QACtCE,QAAQN,SAASM,MAAM;QACvBC,MAAMC,OAAOR,SAASS,YAAY,IAAI,IAAIpB,UAAUqB,GAAG,GAAGrB,UAAUsB,IAAI;QACxEC,UACEX,SAASI,cAAcO,YAAYC,KAAKC,GAAG,CAACd,SAASS,YAAY;QACnEM,WAAWd,SAASI,cAAcU;IACpC;IAEA,MAAMC,aAAapB,gBAAgB,CAACI,SAASM,MAAM,CAAE;IACrD,MAAM,EAAEW,MAAMC,SAAS,EAAE,GAAGrB,aAAaK,MAAMI,MAAM;IAErD,MAAM,CAACa,cAAc,GAAG3B,YAAY;IACpC,MAAM,CAAC4B,cAAc,GAAG5B,YAAY,kBAAkB;IACtD,MAAM,CAAC6B,cAAc,GAAG7B,YAAY,kBAAkB;IAEtD,MAAM,CAAC8B,QAAQC,UAAU,GAAGnC,SAA+B;IAE3DD,UAAU;QACR,IAAI,CAACc,SAASI,cAAc;QAC5B,MAAMmB,iBAAiB7B,kBAAkBM,QAAQI,YAAY;QAC7D,IAAImB,eAAeC,gBAAgB,EAAE;YACnCC,cAAc,oBAAoBF,eAAeC,gBAAgB,EAAE;gBACjEE,gBAAgB;YAClB;QACF;QACA,IAAIH,eAAeI,gBAAgB,EAAE;YACnCF,cAAc,oBAAoBF,eAAeI,gBAAgB,EAAE;gBACjED,gBAAgB;YAClB;QACF;IACF,GAAG,EAAE;IAEL,MAAME,iBAAiB,CACrBC,KACAC,OACA9B;;QAMAE,SAAS,CAAC6B;YACR,MAAMzB,OAAOP,SAASS,YAAY,GAAI,IAAIpB,UAAUqB,GAAG,GAAGrB,UAAUsB,IAAI;YAExE,IAAImB,QAAQ,UAAU;gBACpBC,QAAQA,QAAQ,CAAC,CAAC,EAAEA,MAAM,CAAC,GAAG;YAChC;YAEA,MAAME,WAAW1C,gBACfuC,KACA;gBACEA;gBACAC;gBACAG,YAAYlC,SAASmC,kBAAkB;gBACvCC,KACE7B,SAASlB,UAAUqB,GAAG,GAClBF,OAAOwB,KAAKpB,QAAQ,IACpB,CAACJ,OAAOwB,KAAKpB,QAAQ;gBAC3ByB,WAAW9B;YACb,GACA;gBACED,QAAQU;YACV;;YAKF,OAAO;gBACL,GAAGgB,IAAI;gBACP,GAAGC,QAAQ;gBACXN,gBAAgB1B,SAAS0B;YAC3B;QACF;IACF;IAEA,MAAMD,gBAAgB,OACpBI,KACAC,OACA9B;QAIA,IAAI6B,QAAQ,YAAY;YACtB3B,SAAS,CAAC6B,OAAU,CAAA;oBAAE,GAAGA,IAAI;oBAAEpB,UAAUmB;gBAAM,CAAA;YAE/C,IAAI,OAAO7B,MAAM0B,gBAAgB,KAAK,aAAa;gBACjDC,eAAe,oBAAoB3B,MAAM0B,gBAAgB,EAAE;oBACzDD,gBAAgB;gBAClB;YACF;YAEA,IAAI,OAAOzB,MAAMuB,gBAAgB,KAAK,aAAa;gBACjDI,eAAe,oBAAoB3B,MAAMuB,gBAAgB,EAAE;oBACzDE,gBAAgB;gBAClB;YACF;YAEA;QACF;QAEAE,eAAeC,KAAKC,OAAO9B;IAC7B;IAEA;;GAEC,GACD,MAAMqC,cAAc;QAClBhC,QAAQU;QACRuB,QAAQ1B,KAAKC,GAAG,CAACd,SAASS,YAAY;QACtCS;IACF;IAEA,mCAAmC;IACnC/B,UAAU;QACRqD,sBAAsB;YACpB,IAAItC,MAAMyB,cAAc,EAAE;YAC1B,MAAMc,eAAeC;YACrBD,aACGE,QAAQ,CAACzC,OAA0BoC,aACnCM,IAAI,CAAC,CAACtB;gBACLC,UAAUD;YACZ;QACJ;IACF,GAAG;QAACpB;QAAOoC,YAAYpB,SAAS;QAAEhB,MAAMU,QAAQ;KAAC;IAEjD,MAAMiC,YAAY,CAACC;QACjB,MAAMC,OAAOC,OAAOD,IAAI,CAACD;QACzBC,KAAKE,OAAO,CAAC,CAACnB;YACZJ,cACEI,KACAgB,MAAM,CAAChB,IAA+B;QAE1C;IACF;IAEA,MAAMa,WAAW;QAKf,MAAMF,eAAeC;QAErB,OAAO,IAAIQ,QAAQ,CAACC,SAASC;YAC3B,OAAOX,aACJE,QAAQ,CACPzC,OACAoC,aAEDM,IAAI,CAAC,CAACtB;;gBAGL,IAAIA,QAAQ;oBACVC,UAAUD;oBACV,OAAO8B,OAAO9B;gBAChB;gBAEA6B,QACEV,aAAaY,MAAM,CACjBnD,OACAoC;YAGN;QACJ;IACF;IAEAnD,UAAU;IACR,wBAAwB;IAC1B,GAAG;QAACe;KAAM;IAEV,MAAMoD,UAAU;QACd,MAAMC,cAAc/C,OAAON,MAAMU,QAAQ;QACzC,IAAI4C,MAAMD,cAAc,OAAO;QAC/B,OAAOA,gBAAgB1C,KAAKC,GAAG,CAACN,OAAOR,SAASS,YAAY;IAC9D;IAEA,MAAMiC,kBAAkB;QACtB,kGAAkG;QAClG,2CAA2C;QAC3C,IAAIzC,SAASI,cAAcU,cAAcrB,kBAAkB+D,KAAK,EAAE;YAChE,OAAOhE,aAAa4D,MAAM,CAAC3D,kBAAkB+D,KAAK;QACpD;QACA,OAAOhE,aAAa4D,MAAM,CACxBC,YAAY5D,kBAAkBgE,gBAAgB,GAAGhE,kBAAkB+D,KAAK;IAE5E;IAEA,MAAME,SAAS;QACb,MAAMtD,eAAeJ,SAASI;QAC9B,MAAMuD,UAAUvD,cAAcD;QAC9B,MAAMyD,WAAWxD,cAAcU;QAE/B,oDAAoD;QACpD,IAAI,CAAC6C,SAAS;YACZ,OAAOE;QACT;QAEA,4DAA4D;QAC5D,IAAID,aAAanE,kBAAkBgE,gBAAgB,EAAE;YACnD,4CAA4C;YAC5C,IAAIJ,WAAW;gBACb,OAAOS,YAAYH;YACrB;YACA,uDAAuD;YACvD,OAAOE;QACT;QAEA,sFAAsF;QAEtF,OAAOC,YAAYH;IACrB;IAEA,MAAME,cAAc;QAClB,MAAMrB,eAAeC;QAErB,MAAMsB,YAAYvB,aAAaY,MAAM,CACnCnD,OACAoC;QAGF,IAAI0B,UAAUC,YAAY,CAACC,MAAM,KAAK,GAAG;YACvC,MAAM,IAAI5E,SAAS;QACrB;QAEA,OAAO6B,cAAc6C;IACvB;IAEA,MAAMG,cAAc,CAACP,SAAiBtD;QACpC,OAAOe,cAAc,MAAM;YACzB+C,UAAUR;YACVtD;QACF;IACF;IAEA,MAAMyD,cAAc,CAACH;QACnB,MAAMnB,eAAeC;QAErB,MAAM,CAAC2B,oBAAoBC,YAAY,GAAG7B,aAAa8B,gBAAgB,CACrE,aAAa;QACbrE,OACAD,SAASI,cACTiC;QAGF,IAAI+B,mBAAmBJ,YAAY,CAACC,MAAM,KAAK,GAAG;YAChD,OAAOhB,QAAQC,OAAO,CAAC;QACzB;QAEA,MAAMqB,aACJF,YAAYL,YAAY,CAACQ,MAAM,CAC7B,CAACvE,QACC,OAAOA,MAAMwE,YAAY,KAAK,aAAa,CAACxE,MAAMwE,YAAY,EAChER,MAAM,KAAK;QAEf,IAAIM,YAAY;YACd,OAAOL,YAAYP,SAAS1D,MAAMI,MAAM;QAC1C;QAEA,OAAOc,cAAc;YACnBgD,UAAUR;YACV,GAAGS,kBAAkB;QACvB;IACF;IAEA,OAAO;QACLvE,KAAK;YAAC;SAAiB,EAAEI;QACzB;YACEyD;YAEAN,QAAQM;YAERgB,QAAQZ;YACRa,UAAUlD;YACVmB;YACA,8BAA8B;YAC9B,sBAAsB;YACtBF;YACArB;QACF;KACD;AACH,EAAE"}
|