@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.
Files changed (355) hide show
  1. package/esm/dataProvider.d.ts.map +1 -1
  2. package/esm/dataProvider.js +0 -2
  3. package/esm/dataProvider.js.map +1 -1
  4. package/esm/index.d.ts +4 -3
  5. package/esm/index.d.ts.map +1 -1
  6. package/esm/index.js +4 -3
  7. package/esm/index.js.map +1 -1
  8. package/esm/orderly/orderlyHooks.d.ts +3 -2
  9. package/esm/orderly/orderlyHooks.d.ts.map +1 -1
  10. package/esm/orderly/orderlyHooks.js +3 -2
  11. package/esm/orderly/orderlyHooks.js.map +1 -1
  12. package/esm/orderly/useCollateral.js +2 -2
  13. package/esm/orderly/useCollateral.js.map +1 -1
  14. package/esm/orderly/useMarginRatio.js +1 -1
  15. package/esm/orderly/useMarginRatio.js.map +1 -1
  16. package/esm/orderly/useMaxQty.js +2 -2
  17. package/esm/orderly/useMaxQty.js.map +1 -1
  18. package/esm/orderly/useOrderEntry.d.ts.map +1 -1
  19. package/esm/orderly/useOrderEntry.js +15 -12
  20. package/esm/orderly/useOrderEntry.js.map +1 -1
  21. package/esm/orderly/useOrderEntryNext/index.d.ts +1 -0
  22. package/esm/orderly/useOrderEntryNext/index.d.ts.map +1 -0
  23. package/esm/orderly/useOrderEntryNext/index.js +2 -0
  24. package/esm/orderly/useOrderEntryNext/index.js.map +1 -0
  25. package/esm/orderly/{useOrderStream.d.ts → useOrderStream/useOrderStream.d.ts} +19 -12
  26. package/esm/orderly/useOrderStream/useOrderStream.d.ts.map +1 -0
  27. package/esm/orderly/{useOrderStream.js → useOrderStream/useOrderStream.js} +91 -26
  28. package/esm/orderly/useOrderStream/useOrderStream.js.map +1 -0
  29. package/esm/orderly/useOrderbookStream.d.ts.map +1 -1
  30. package/esm/orderly/useOrderbookStream.js +13 -6
  31. package/esm/orderly/useOrderbookStream.js.map +1 -1
  32. package/esm/orderly/{usePositionStream.d.ts → usePositionStream/usePositionStream.d.ts} +1 -1
  33. package/esm/orderly/usePositionStream/usePositionStream.d.ts.map +1 -0
  34. package/esm/orderly/{usePositionStream.js → usePositionStream/usePositionStream.js} +30 -22
  35. package/esm/orderly/usePositionStream/usePositionStream.js.map +1 -0
  36. package/esm/orderly/usePositionStream/utils.d.ts +8 -0
  37. package/esm/orderly/usePositionStream/utils.d.ts.map +1 -0
  38. package/esm/orderly/usePositionStream/utils.js +34 -0
  39. package/esm/orderly/usePositionStream/utils.js.map +1 -0
  40. package/esm/orderly/usePrivateDataObserver.d.ts.map +1 -1
  41. package/esm/orderly/usePrivateDataObserver.js +30 -43
  42. package/esm/orderly/usePrivateDataObserver.js.map +1 -1
  43. package/esm/orderly/useTakeProfitAndStopLoss/__test__/useTakeProfitAndStopLoss.test.d.ts +1 -0
  44. package/esm/orderly/useTakeProfitAndStopLoss/__test__/useTakeProfitAndStopLoss.test.d.ts.map +1 -0
  45. package/esm/orderly/useTakeProfitAndStopLoss/__test__/utils.test.d.ts +2 -0
  46. package/esm/orderly/useTakeProfitAndStopLoss/__test__/utils.test.d.ts.map +1 -0
  47. package/esm/orderly/useTakeProfitAndStopLoss/index.d.ts +32 -0
  48. package/esm/orderly/useTakeProfitAndStopLoss/index.d.ts.map +1 -0
  49. package/esm/orderly/useTakeProfitAndStopLoss/index.js +23 -0
  50. package/esm/orderly/useTakeProfitAndStopLoss/index.js.map +1 -0
  51. package/esm/orderly/useTakeProfitAndStopLoss/useTPSL.d.ts +59 -0
  52. package/esm/orderly/useTakeProfitAndStopLoss/useTPSL.d.ts.map +1 -0
  53. package/esm/orderly/useTakeProfitAndStopLoss/useTPSL.js +211 -0
  54. package/esm/orderly/useTakeProfitAndStopLoss/useTPSL.js.map +1 -0
  55. package/esm/orderly/useTakeProfitAndStopLoss/utils.d.ts +70 -0
  56. package/esm/orderly/useTakeProfitAndStopLoss/utils.d.ts.map +1 -0
  57. package/esm/orderly/useTakeProfitAndStopLoss/utils.js +226 -0
  58. package/esm/orderly/useTakeProfitAndStopLoss/utils.js.map +1 -0
  59. package/esm/services/orderCreator/__test__/limitOrderCreator.test.d.ts +2 -0
  60. package/esm/services/orderCreator/__test__/limitOrderCreator.test.d.ts.map +1 -0
  61. package/esm/services/orderCreator/__test__/orderCreator.test.d.ts +2 -0
  62. package/esm/services/orderCreator/__test__/orderCreator.test.d.ts.map +1 -0
  63. package/esm/services/orderCreator/__test__/stopLimitOrderCreator.test.d.ts +2 -0
  64. package/esm/services/orderCreator/__test__/stopLimitOrderCreator.test.d.ts.map +1 -0
  65. package/esm/services/orderCreator/__test__/stopMarketOrderCreator.test.d.ts +2 -0
  66. package/esm/services/orderCreator/__test__/stopMarketOrderCreator.test.d.ts.map +1 -0
  67. package/esm/services/orderCreator/__test__/tpslOrderCreator.test.d.ts +2 -0
  68. package/esm/services/orderCreator/__test__/tpslOrderCreator.test.d.ts.map +1 -0
  69. package/esm/services/orderCreator/__test__/tpslPositionOrderCreator.test.d.ts +2 -0
  70. package/esm/services/orderCreator/__test__/tpslPositionOrderCreator.test.d.ts.map +1 -0
  71. package/esm/services/orderCreator/baseAlgoCreator.d.ts +22 -0
  72. package/esm/services/orderCreator/baseAlgoCreator.d.ts.map +1 -0
  73. package/esm/services/orderCreator/baseAlgoCreator.js +57 -0
  74. package/esm/services/orderCreator/baseAlgoCreator.js.map +1 -0
  75. package/esm/services/orderCreator/baseCreator.d.ts +14 -0
  76. package/esm/services/orderCreator/baseCreator.d.ts.map +1 -0
  77. package/esm/services/orderCreator/baseCreator.js +92 -0
  78. package/esm/services/orderCreator/baseCreator.js.map +1 -0
  79. package/esm/services/orderCreator/factory.d.ts +7 -0
  80. package/esm/services/orderCreator/factory.d.ts.map +1 -0
  81. package/esm/services/orderCreator/factory.js +45 -0
  82. package/esm/services/orderCreator/factory.js.map +1 -0
  83. package/esm/services/orderCreator/fokCreator.d.ts +4 -0
  84. package/esm/services/orderCreator/fokCreator.d.ts.map +1 -0
  85. package/esm/services/orderCreator/fokCreator.js +5 -0
  86. package/esm/services/orderCreator/fokCreator.js.map +1 -0
  87. package/esm/services/orderCreator/generalCreator.d.ts +8 -0
  88. package/esm/services/orderCreator/generalCreator.d.ts.map +1 -0
  89. package/esm/services/orderCreator/generalCreator.js +15 -0
  90. package/esm/services/orderCreator/generalCreator.js.map +1 -0
  91. package/esm/services/orderCreator/interface.d.ts +23 -0
  92. package/esm/services/orderCreator/interface.d.ts.map +1 -0
  93. package/esm/services/orderCreator/interface.js +3 -0
  94. package/esm/services/orderCreator/interface.js.map +1 -0
  95. package/esm/services/orderCreator/iocCreator.d.ts +4 -0
  96. package/esm/services/orderCreator/iocCreator.d.ts.map +1 -0
  97. package/esm/services/orderCreator/iocCreator.js +5 -0
  98. package/esm/services/orderCreator/iocCreator.js.map +1 -0
  99. package/esm/services/orderCreator/limitOrderCreator.d.ts +8 -0
  100. package/esm/services/orderCreator/limitOrderCreator.d.ts.map +1 -0
  101. package/esm/services/orderCreator/limitOrderCreator.js +69 -0
  102. package/esm/services/orderCreator/limitOrderCreator.js.map +1 -0
  103. package/esm/services/orderCreator/marketOrderCreator.d.ts +24 -0
  104. package/esm/services/orderCreator/marketOrderCreator.d.ts.map +1 -0
  105. package/esm/services/orderCreator/marketOrderCreator.js +18 -0
  106. package/esm/services/orderCreator/marketOrderCreator.js.map +1 -0
  107. package/esm/services/orderCreator/postOnlyCreator.d.ts +4 -0
  108. package/esm/services/orderCreator/postOnlyCreator.d.ts.map +1 -0
  109. package/esm/services/orderCreator/postOnlyCreator.js +5 -0
  110. package/esm/services/orderCreator/postOnlyCreator.js.map +1 -0
  111. package/esm/services/orderCreator/stopLimitOrderCreator.d.ts +11 -0
  112. package/esm/services/orderCreator/stopLimitOrderCreator.d.ts.map +1 -0
  113. package/esm/services/orderCreator/stopLimitOrderCreator.js +84 -0
  114. package/esm/services/orderCreator/stopLimitOrderCreator.js.map +1 -0
  115. package/esm/services/orderCreator/stopMarketOrderCreator.d.ts +30 -0
  116. package/esm/services/orderCreator/stopMarketOrderCreator.d.ts.map +1 -0
  117. package/esm/services/orderCreator/stopMarketOrderCreator.js +46 -0
  118. package/esm/services/orderCreator/stopMarketOrderCreator.js.map +1 -0
  119. package/esm/services/orderCreator/tpslOrderCreator.d.ts +32 -0
  120. package/esm/services/orderCreator/tpslOrderCreator.d.ts.map +1 -0
  121. package/esm/services/orderCreator/tpslOrderCreator.js +88 -0
  122. package/esm/services/orderCreator/tpslOrderCreator.js.map +1 -0
  123. package/esm/services/orderCreator/tpslPositionOrderCreator.d.ts +33 -0
  124. package/esm/services/orderCreator/tpslPositionOrderCreator.d.ts.map +1 -0
  125. package/esm/services/orderCreator/tpslPositionOrderCreator.js +74 -0
  126. package/esm/services/orderCreator/tpslPositionOrderCreator.js.map +1 -0
  127. package/esm/services/orderMerge/algoOrderMergeHandler.d.ts +9 -0
  128. package/esm/services/orderMerge/algoOrderMergeHandler.d.ts.map +1 -0
  129. package/esm/services/orderMerge/algoOrderMergeHandler.js +38 -0
  130. package/esm/services/orderMerge/algoOrderMergeHandler.js.map +1 -0
  131. package/esm/services/orderMerge/baseMergeHandler.d.ts +22 -0
  132. package/esm/services/orderMerge/baseMergeHandler.d.ts.map +1 -0
  133. package/esm/services/orderMerge/baseMergeHandler.js +160 -0
  134. package/esm/services/orderMerge/baseMergeHandler.js.map +1 -0
  135. package/esm/services/orderMerge/interface.d.ts +8 -0
  136. package/esm/services/orderMerge/interface.d.ts.map +1 -0
  137. package/esm/services/orderMerge/interface.js +3 -0
  138. package/esm/services/orderMerge/interface.js.map +1 -0
  139. package/esm/services/orderMerge/regularOrderMergeHandler.d.ts +8 -0
  140. package/esm/services/orderMerge/regularOrderMergeHandler.d.ts.map +1 -0
  141. package/esm/services/orderMerge/regularOrderMergeHandler.js +15 -0
  142. package/esm/services/orderMerge/regularOrderMergeHandler.js.map +1 -0
  143. package/esm/usePoster.d.ts +3 -0
  144. package/esm/usePoster.d.ts.map +1 -1
  145. package/esm/usePoster.js +3 -1
  146. package/esm/usePoster.js.map +1 -1
  147. package/esm/utils/createOrder.d.ts +0 -55
  148. package/esm/utils/createOrder.d.ts.map +1 -1
  149. package/esm/utils/createOrder.js +0 -334
  150. package/esm/utils/createOrder.js.map +1 -1
  151. package/esm/utils/fokCreator.d.ts +1 -0
  152. package/esm/utils/fokCreator.d.ts.map +1 -0
  153. package/esm/utils/fokCreator.js +2 -0
  154. package/esm/utils/fokCreator.js.map +1 -0
  155. package/esm/utils/index.d.ts +5 -0
  156. package/esm/utils/index.d.ts.map +1 -0
  157. package/esm/utils/index.js +6 -0
  158. package/esm/utils/index.js.map +1 -0
  159. package/esm/utils/order.d.ts +2 -0
  160. package/esm/utils/order.d.ts.map +1 -0
  161. package/esm/utils/order.js +3 -0
  162. package/esm/utils/order.js.map +1 -0
  163. package/esm/utils/swr.d.ts +3 -1
  164. package/esm/utils/swr.d.ts.map +1 -1
  165. package/esm/utils/swr.js +123 -89
  166. package/esm/utils/swr.js.map +1 -1
  167. package/esm/utils/ws.d.ts +2 -0
  168. package/esm/utils/ws.d.ts.map +1 -0
  169. package/esm/utils/ws.js +9 -0
  170. package/esm/utils/ws.js.map +1 -0
  171. package/esm/version.d.ts +1 -1
  172. package/esm/version.js +2 -2
  173. package/esm/version.js.map +1 -1
  174. package/lib/dataProvider.d.ts.map +1 -1
  175. package/lib/dataProvider.js +0 -2
  176. package/lib/dataProvider.js.map +1 -1
  177. package/lib/index.d.ts +4 -3
  178. package/lib/index.d.ts.map +1 -1
  179. package/lib/index.js +10 -3
  180. package/lib/index.js.map +1 -1
  181. package/lib/orderly/orderlyHooks.d.ts +3 -2
  182. package/lib/orderly/orderlyHooks.d.ts.map +1 -1
  183. package/lib/orderly/orderlyHooks.js +6 -2
  184. package/lib/orderly/orderlyHooks.js.map +1 -1
  185. package/lib/orderly/useCollateral.js +2 -2
  186. package/lib/orderly/useCollateral.js.map +1 -1
  187. package/lib/orderly/useMarginRatio.js +1 -1
  188. package/lib/orderly/useMarginRatio.js.map +1 -1
  189. package/lib/orderly/useMaxQty.js +2 -2
  190. package/lib/orderly/useMaxQty.js.map +1 -1
  191. package/lib/orderly/useOrderEntry.d.ts.map +1 -1
  192. package/lib/orderly/useOrderEntry.js +14 -12
  193. package/lib/orderly/useOrderEntry.js.map +1 -1
  194. package/lib/orderly/useOrderEntryNext/index.d.ts +1 -0
  195. package/lib/orderly/useOrderEntryNext/index.d.ts.map +1 -0
  196. package/lib/orderly/useOrderEntryNext/index.js +3 -0
  197. package/lib/orderly/useOrderEntryNext/index.js.map +1 -0
  198. package/lib/orderly/{useOrderStream.d.ts → useOrderStream/useOrderStream.d.ts} +19 -12
  199. package/lib/orderly/useOrderStream/useOrderStream.d.ts.map +1 -0
  200. package/lib/orderly/{useOrderStream.js → useOrderStream/useOrderStream.js} +89 -25
  201. package/lib/orderly/useOrderStream/useOrderStream.js.map +1 -0
  202. package/lib/orderly/useOrderbookStream.d.ts.map +1 -1
  203. package/lib/orderly/useOrderbookStream.js +12 -5
  204. package/lib/orderly/useOrderbookStream.js.map +1 -1
  205. package/lib/orderly/{usePositionStream.d.ts → usePositionStream/usePositionStream.d.ts} +1 -1
  206. package/lib/orderly/usePositionStream/usePositionStream.d.ts.map +1 -0
  207. package/lib/orderly/{usePositionStream.js → usePositionStream/usePositionStream.js} +30 -22
  208. package/lib/orderly/usePositionStream/usePositionStream.js.map +1 -0
  209. package/lib/orderly/usePositionStream/utils.d.ts +8 -0
  210. package/lib/orderly/usePositionStream/utils.d.ts.map +1 -0
  211. package/lib/orderly/usePositionStream/utils.js +55 -0
  212. package/lib/orderly/usePositionStream/utils.js.map +1 -0
  213. package/lib/orderly/usePrivateDataObserver.d.ts.map +1 -1
  214. package/lib/orderly/usePrivateDataObserver.js +28 -41
  215. package/lib/orderly/usePrivateDataObserver.js.map +1 -1
  216. package/lib/orderly/useTakeProfitAndStopLoss/__test__/useTakeProfitAndStopLoss.test.d.ts +1 -0
  217. package/lib/orderly/useTakeProfitAndStopLoss/__test__/useTakeProfitAndStopLoss.test.d.ts.map +1 -0
  218. package/lib/orderly/useTakeProfitAndStopLoss/__test__/utils.test.d.ts +2 -0
  219. package/lib/orderly/useTakeProfitAndStopLoss/__test__/utils.test.d.ts.map +1 -0
  220. package/lib/orderly/useTakeProfitAndStopLoss/index.d.ts +32 -0
  221. package/lib/orderly/useTakeProfitAndStopLoss/index.d.ts.map +1 -0
  222. package/lib/orderly/useTakeProfitAndStopLoss/index.js +33 -0
  223. package/lib/orderly/useTakeProfitAndStopLoss/index.js.map +1 -0
  224. package/lib/orderly/useTakeProfitAndStopLoss/useTPSL.d.ts +59 -0
  225. package/lib/orderly/useTakeProfitAndStopLoss/useTPSL.d.ts.map +1 -0
  226. package/lib/orderly/useTakeProfitAndStopLoss/useTPSL.js +218 -0
  227. package/lib/orderly/useTakeProfitAndStopLoss/useTPSL.js.map +1 -0
  228. package/lib/orderly/useTakeProfitAndStopLoss/utils.d.ts +70 -0
  229. package/lib/orderly/useTakeProfitAndStopLoss/utils.d.ts.map +1 -0
  230. package/lib/orderly/useTakeProfitAndStopLoss/utils.js +252 -0
  231. package/lib/orderly/useTakeProfitAndStopLoss/utils.js.map +1 -0
  232. package/lib/services/orderCreator/__test__/limitOrderCreator.test.d.ts +2 -0
  233. package/lib/services/orderCreator/__test__/limitOrderCreator.test.d.ts.map +1 -0
  234. package/lib/services/orderCreator/__test__/orderCreator.test.d.ts +2 -0
  235. package/lib/services/orderCreator/__test__/orderCreator.test.d.ts.map +1 -0
  236. package/lib/services/orderCreator/__test__/stopLimitOrderCreator.test.d.ts +2 -0
  237. package/lib/services/orderCreator/__test__/stopLimitOrderCreator.test.d.ts.map +1 -0
  238. package/lib/services/orderCreator/__test__/stopMarketOrderCreator.test.d.ts +2 -0
  239. package/lib/services/orderCreator/__test__/stopMarketOrderCreator.test.d.ts.map +1 -0
  240. package/lib/services/orderCreator/__test__/tpslOrderCreator.test.d.ts +2 -0
  241. package/lib/services/orderCreator/__test__/tpslOrderCreator.test.d.ts.map +1 -0
  242. package/lib/services/orderCreator/__test__/tpslPositionOrderCreator.test.d.ts +2 -0
  243. package/lib/services/orderCreator/__test__/tpslPositionOrderCreator.test.d.ts.map +1 -0
  244. package/lib/services/orderCreator/baseAlgoCreator.d.ts +22 -0
  245. package/lib/services/orderCreator/baseAlgoCreator.d.ts.map +1 -0
  246. package/lib/services/orderCreator/baseAlgoCreator.js +67 -0
  247. package/lib/services/orderCreator/baseAlgoCreator.js.map +1 -0
  248. package/lib/services/orderCreator/baseCreator.d.ts +14 -0
  249. package/lib/services/orderCreator/baseCreator.d.ts.map +1 -0
  250. package/lib/services/orderCreator/baseCreator.js +102 -0
  251. package/lib/services/orderCreator/baseCreator.js.map +1 -0
  252. package/lib/services/orderCreator/factory.d.ts +7 -0
  253. package/lib/services/orderCreator/factory.d.ts.map +1 -0
  254. package/lib/services/orderCreator/factory.js +54 -0
  255. package/lib/services/orderCreator/factory.js.map +1 -0
  256. package/lib/services/orderCreator/fokCreator.d.ts +4 -0
  257. package/lib/services/orderCreator/fokCreator.d.ts.map +1 -0
  258. package/lib/services/orderCreator/fokCreator.js +15 -0
  259. package/lib/services/orderCreator/fokCreator.js.map +1 -0
  260. package/lib/services/orderCreator/generalCreator.d.ts +8 -0
  261. package/lib/services/orderCreator/generalCreator.d.ts.map +1 -0
  262. package/lib/services/orderCreator/generalCreator.js +25 -0
  263. package/lib/services/orderCreator/generalCreator.js.map +1 -0
  264. package/lib/services/orderCreator/interface.d.ts +23 -0
  265. package/lib/services/orderCreator/interface.d.ts.map +1 -0
  266. package/lib/services/orderCreator/interface.js +6 -0
  267. package/lib/services/orderCreator/interface.js.map +1 -0
  268. package/lib/services/orderCreator/iocCreator.d.ts +4 -0
  269. package/lib/services/orderCreator/iocCreator.d.ts.map +1 -0
  270. package/lib/services/orderCreator/iocCreator.js +15 -0
  271. package/lib/services/orderCreator/iocCreator.js.map +1 -0
  272. package/lib/services/orderCreator/limitOrderCreator.d.ts +8 -0
  273. package/lib/services/orderCreator/limitOrderCreator.d.ts.map +1 -0
  274. package/lib/services/orderCreator/limitOrderCreator.js +79 -0
  275. package/lib/services/orderCreator/limitOrderCreator.js.map +1 -0
  276. package/lib/services/orderCreator/marketOrderCreator.d.ts +24 -0
  277. package/lib/services/orderCreator/marketOrderCreator.d.ts.map +1 -0
  278. package/lib/services/orderCreator/marketOrderCreator.js +28 -0
  279. package/lib/services/orderCreator/marketOrderCreator.js.map +1 -0
  280. package/lib/services/orderCreator/postOnlyCreator.d.ts +4 -0
  281. package/lib/services/orderCreator/postOnlyCreator.d.ts.map +1 -0
  282. package/lib/services/orderCreator/postOnlyCreator.js +15 -0
  283. package/lib/services/orderCreator/postOnlyCreator.js.map +1 -0
  284. package/lib/services/orderCreator/stopLimitOrderCreator.d.ts +11 -0
  285. package/lib/services/orderCreator/stopLimitOrderCreator.d.ts.map +1 -0
  286. package/lib/services/orderCreator/stopLimitOrderCreator.js +93 -0
  287. package/lib/services/orderCreator/stopLimitOrderCreator.js.map +1 -0
  288. package/lib/services/orderCreator/stopMarketOrderCreator.d.ts +30 -0
  289. package/lib/services/orderCreator/stopMarketOrderCreator.d.ts.map +1 -0
  290. package/lib/services/orderCreator/stopMarketOrderCreator.js +56 -0
  291. package/lib/services/orderCreator/stopMarketOrderCreator.js.map +1 -0
  292. package/lib/services/orderCreator/tpslOrderCreator.d.ts +32 -0
  293. package/lib/services/orderCreator/tpslOrderCreator.d.ts.map +1 -0
  294. package/lib/services/orderCreator/tpslOrderCreator.js +94 -0
  295. package/lib/services/orderCreator/tpslOrderCreator.js.map +1 -0
  296. package/lib/services/orderCreator/tpslPositionOrderCreator.d.ts +33 -0
  297. package/lib/services/orderCreator/tpslPositionOrderCreator.d.ts.map +1 -0
  298. package/lib/services/orderCreator/tpslPositionOrderCreator.js +83 -0
  299. package/lib/services/orderCreator/tpslPositionOrderCreator.js.map +1 -0
  300. package/lib/services/orderMerge/algoOrderMergeHandler.d.ts +9 -0
  301. package/lib/services/orderMerge/algoOrderMergeHandler.d.ts.map +1 -0
  302. package/lib/services/orderMerge/algoOrderMergeHandler.js +48 -0
  303. package/lib/services/orderMerge/algoOrderMergeHandler.js.map +1 -0
  304. package/lib/services/orderMerge/baseMergeHandler.d.ts +22 -0
  305. package/lib/services/orderMerge/baseMergeHandler.d.ts.map +1 -0
  306. package/lib/services/orderMerge/baseMergeHandler.js +170 -0
  307. package/lib/services/orderMerge/baseMergeHandler.js.map +1 -0
  308. package/lib/services/orderMerge/interface.d.ts +8 -0
  309. package/lib/services/orderMerge/interface.d.ts.map +1 -0
  310. package/lib/services/orderMerge/interface.js +6 -0
  311. package/lib/services/orderMerge/interface.js.map +1 -0
  312. package/lib/services/orderMerge/regularOrderMergeHandler.d.ts +8 -0
  313. package/lib/services/orderMerge/regularOrderMergeHandler.d.ts.map +1 -0
  314. package/lib/services/orderMerge/regularOrderMergeHandler.js +25 -0
  315. package/lib/services/orderMerge/regularOrderMergeHandler.js.map +1 -0
  316. package/lib/usePoster.d.ts +3 -0
  317. package/lib/usePoster.d.ts.map +1 -1
  318. package/lib/usePoster.js +3 -1
  319. package/lib/usePoster.js.map +1 -1
  320. package/lib/utils/createOrder.d.ts +0 -55
  321. package/lib/utils/createOrder.d.ts.map +1 -1
  322. package/lib/utils/createOrder.js +3 -375
  323. package/lib/utils/createOrder.js.map +1 -1
  324. package/lib/utils/fokCreator.d.ts +1 -0
  325. package/lib/utils/fokCreator.d.ts.map +1 -0
  326. package/lib/utils/fokCreator.js +3 -0
  327. package/lib/utils/fokCreator.js.map +1 -0
  328. package/lib/utils/index.d.ts +5 -0
  329. package/lib/utils/index.d.ts.map +1 -0
  330. package/lib/utils/index.js +36 -0
  331. package/lib/utils/index.js.map +1 -0
  332. package/lib/utils/order.d.ts +2 -0
  333. package/lib/utils/order.d.ts.map +1 -0
  334. package/lib/utils/order.js +6 -0
  335. package/lib/utils/order.js.map +1 -0
  336. package/lib/utils/swr.d.ts +3 -1
  337. package/lib/utils/swr.d.ts.map +1 -1
  338. package/lib/utils/swr.js +128 -89
  339. package/lib/utils/swr.js.map +1 -1
  340. package/lib/utils/ws.d.ts +2 -0
  341. package/lib/utils/ws.d.ts.map +1 -0
  342. package/lib/utils/ws.js +19 -0
  343. package/lib/utils/ws.js.map +1 -0
  344. package/lib/version.d.ts +1 -1
  345. package/lib/version.js +2 -2
  346. package/lib/version.js.map +1 -1
  347. package/package.json +10 -8
  348. package/esm/orderly/useOrderStream.d.ts.map +0 -1
  349. package/esm/orderly/useOrderStream.js.map +0 -1
  350. package/esm/orderly/usePositionStream.d.ts.map +0 -1
  351. package/esm/orderly/usePositionStream.js.map +0 -1
  352. package/lib/orderly/useOrderStream.d.ts.map +0 -1
  353. package/lib/orderly/useOrderStream.js.map +0 -1
  354. package/lib/orderly/usePositionStream.d.ts.map +0 -1
  355. package/lib/orderly/usePositionStream.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/orderly/useOrderEntryNext/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/orderly/useOrderEntryNext/index.ts"],"names":[],"rangeMappings":"","mappings":""}
@@ -1,17 +1,21 @@
1
- import { OrderSide, OrderEntity, OrderStatus } from "@orderly.network/types";
2
- export interface UserOrdersReturn {
3
- data: any[];
4
- loading: boolean;
5
- update: (order: any) => void;
6
- cancel: (order: any) => void;
7
- }
8
- type Params = {
1
+ import { OrderSide, OrderEntity, OrderStatus, API, AlgoOrderRootType } from "@orderly.network/types";
2
+ type CombineOrderType = AlgoOrderRootType | "ALL";
3
+ export declare const useOrderStream: (params: {
9
4
  symbol?: string;
10
5
  status?: OrderStatus;
11
6
  size?: number;
12
7
  side?: OrderSide;
13
- };
14
- export declare const useOrderStream: (params: Params, options?: {
8
+ /**
9
+ * Include the order type
10
+ * @default ["ALL"]
11
+ */
12
+ includes?: CombineOrderType[];
13
+ /**
14
+ * Exclude the order type
15
+ * @default []
16
+ */
17
+ excludes?: CombineOrderType[];
18
+ }, options?: {
15
19
  /**
16
20
  * Keep the state update alive
17
21
  */
@@ -21,15 +25,18 @@ export declare const useOrderStream: (params: Params, options?: {
21
25
  */
22
26
  stopOnUnmount?: boolean;
23
27
  }) => readonly [any[] | null, {
24
- readonly total: any;
28
+ readonly total: number;
25
29
  readonly isLoading: boolean;
26
30
  readonly refresh: import("swr/_internal").KeyedMutator<any[]>;
27
31
  readonly loadMore: () => void;
28
- readonly cancelAllOrders: () => void;
32
+ readonly cancelAllOrders: () => Promise<[any, any]>;
33
+ readonly cancelAllAlgoOrders: () => Promise<[any, any]>;
29
34
  readonly updateOrder: (orderId: string, order: OrderEntity) => Promise<any>;
30
35
  readonly cancelOrder: (orderId: number, symbol?: string) => Promise<any>;
31
36
  readonly updateAlgoOrder: (orderId: string, order: OrderEntity) => Promise<any>;
32
37
  readonly cancelAlgoOrder: (orderId: number, symbol?: string) => Promise<any>;
38
+ readonly cancelTPSLChildOrder: (orderId: number, rootAlgoOrderId: number) => Promise<any>;
39
+ readonly updateTPSLOrder: (orderId: number, childOrders: API.AlgoOrder["child_orders"]) => Promise<any>;
33
40
  readonly errors: {
34
41
  readonly cancelOrder: unknown;
35
42
  readonly updateOrder: unknown;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOrderStream.d.ts","sourceRoot":"","sources":["../../../src/orderly/useOrderStream/useOrderStream.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,SAAS,EACT,WAAW,EACX,WAAW,EACX,GAAG,EACH,iBAAiB,EAClB,MAAM,wBAAwB,CAAC;AAWhC,KAAK,gBAAgB,GAAG,iBAAiB,GAAG,KAAK,CAAC;AAElD,eAAO,MAAM,cAAc,WAIjB;IACN,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC/B,YACS;IACR;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;;;;;;;oCAwKyC,MAAM,SAAS,WAAW;oCAoD1B,MAAM,WAAW,MAAM;wCA7CnB,MAAM,SAAS,WAAW;wCAoD1B,MAAM,WAAW,MAAM;6CAazD,MAAM,mBAAmB,MAAM,KAAG,QAAQ,GAAG,CAAC;wCAmB7C,MAAM,eACF,IAAI,SAAS,CAAC,cAAc,CAAC;;;;;;;;;;;;;EA0C/C,CAAC"}
@@ -1,22 +1,25 @@
1
- import { usePrivateInfiniteQuery } from "../usePrivateInfiniteQuery";
1
+ import { usePrivateInfiniteQuery } from "../../usePrivateInfiniteQuery";
2
2
  import { useCallback, useEffect, useMemo } from "react";
3
- import { OrderStatus } from "@orderly.network/types";
4
- import { useMarkPricesStream } from "./useMarkPricesStream";
5
- import { useMutation } from "../useMutation";
6
- import version from "../version";
7
- import { useDataCenterContext } from "../dataProvider";
8
- import { generateKeyFun } from "../utils/swr";
9
- import { useEventEmitter } from "../useEventEmitter";
3
+ import { OrderStatus, AlgoOrderRootType } from "@orderly.network/types";
4
+ import { useMarkPricesStream } from "../useMarkPricesStream";
5
+ import { useMutation } from "../../useMutation";
6
+ import version from "../../version";
7
+ import { useDataCenterContext } from "../../dataProvider";
8
+ import { generateKeyFun } from "../../utils/swr";
9
+ import { SDKError } from "@orderly.network/types";
10
10
  export const useOrderStream = (/**
11
11
  * Orders query params
12
12
  */ params, options)=>{
13
- const { status, symbol, side, size = 100 } = params;
13
+ const { status, symbol, side, size = 100, includes = [
14
+ "ALL"
15
+ ], excludes = [] } = params;
14
16
  const { data: markPrices = {} } = useMarkPricesStream();
15
- const ee = useEventEmitter();
16
17
  const { regesterKeyHandler, unregisterKeyHandler } = useDataCenterContext();
17
18
  const [doCancelOrder, { error: cancelOrderError, isMutating: cancelMutating }] = useMutation("/v1/order", "DELETE");
19
+ const [doCancelAllOrders] = useMutation("/v1/orders", "DELETE");
18
20
  const [doUpdateOrder, { error: updateOrderError, isMutating: updateMutating }] = useMutation("/v1/order", "PUT");
19
21
  const [doCanceAlgolOrder, { error: cancelAlgoOrderError, isMutating: cancelAlgoMutating }] = useMutation("/v1/algo/order", "DELETE");
22
+ const [doCancelAllAlgoOrders] = useMutation("/v1/algo/orders", "DELETE");
20
23
  const [doUpdateAlgoOrder, { error: updateAlgoOrderError, isMutating: updateAlgoMutating }] = useMutation("/v1/algo/order", "PUT");
21
24
  useEffect(()=>{
22
25
  const formatKey = (value)=>value ? `:${value}` : "";
@@ -55,9 +58,25 @@ export const useOrderStream = (/**
55
58
  if (!ordersResponse.data) {
56
59
  return null;
57
60
  }
58
- return ordersResponse.data?.map((item)=>item.rows)?.flat();
61
+ let orders = ordersResponse.data?.map((item)=>item.rows)?.flat();
62
+ // return ordersResponse.data?.map((item) => item.rows)?.flat();
63
+ if (includes.includes("ALL") && excludes.length === 0) {
64
+ return orders;
65
+ }
66
+ if (includes.includes("ALL") && excludes.length > 0) {
67
+ return orders?.filter((item)=>!excludes.includes(item.algo_type));
68
+ }
69
+ if (includes.length > 0 && excludes.length === 0) {
70
+ return orders?.filter((item)=>includes.includes(item.algo_type));
71
+ }
72
+ if (includes.length > 0 && excludes.length > 0) {
73
+ return orders?.filter((item)=>includes.includes(item.algo_type) && !excludes.includes(item.algo_type));
74
+ }
75
+ return orders;
59
76
  }, [
60
- ordersResponse.data
77
+ ordersResponse.data,
78
+ includes,
79
+ excludes
61
80
  ]);
62
81
  // console.log(ordersResponse.data);
63
82
  const orders = useMemo(()=>{
@@ -68,10 +87,17 @@ export const useOrderStream = (/**
68
87
  return flattenOrders;
69
88
  }
70
89
  return flattenOrders.map((item)=>{
71
- return {
90
+ const order = {
72
91
  ...item,
73
92
  mark_price: markPrices[item.symbol] ?? 0
74
93
  };
94
+ ///TODO: remove this when BE provides the correct data
95
+ // console.log("------------->>>>>>>>", order);
96
+ if (order.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL || order.algo_type === AlgoOrderRootType.TP_SL) {
97
+ order.quantity = order.child_orders[0].quantity;
98
+ }
99
+ ///-----------------todo end----------------
100
+ return order;
75
101
  });
76
102
  }, [
77
103
  flattenOrders,
@@ -79,13 +105,33 @@ export const useOrderStream = (/**
79
105
  status
80
106
  ]);
81
107
  const total = useMemo(()=>{
82
- return ordersResponse.data?.[0]?.meta?.total || 0;
108
+ return orders?.length || 0;
109
+ // return ordersResponse.data?.[0]?.meta?.total || 0;
83
110
  }, [
84
- ordersResponse.data?.[0]?.meta?.total
111
+ orders?.length
85
112
  ]);
86
113
  /**
87
114
  * cancel all orders
88
- */ const cancelAllOrders = useCallback(()=>{}, [
115
+ */ const cancelAllOrders = useCallback(()=>{
116
+ return Promise.all([
117
+ doCancelAllOrders(null),
118
+ doCancelAllAlgoOrders(null, {
119
+ algo_type: "STOP"
120
+ })
121
+ ]);
122
+ }, [
123
+ ordersResponse.data
124
+ ]);
125
+ const cancelAllAlgoOrders = useCallback(()=>{
126
+ return Promise.all([
127
+ doCancelAllAlgoOrders(null, {
128
+ algo_type: "TP_SL"
129
+ }),
130
+ doCancelAllAlgoOrders(null, {
131
+ algo_type: "POSITIONAL_TP_SL"
132
+ })
133
+ ]);
134
+ }, [
89
135
  ordersResponse.data
90
136
  ]);
91
137
  const _updateOrder = useCallback((orderId, order, type)=>{
@@ -112,16 +158,7 @@ export const useOrderStream = (/**
112
158
  /**
113
159
  * update algo order
114
160
  */ const updateAlgoOrder = useCallback((orderId, order)=>{
115
- return _updateOrder(orderId, order, "algoOrder").then((res)=>{
116
- // TODO: remove this when the WS service provides the correct data
117
- ee.emit("algoOrder:cache", {
118
- // ...res.data.rows[0],
119
- ...order,
120
- order_id: Number(orderId)
121
- });
122
- //------------fix end----------------
123
- return res;
124
- });
161
+ return _updateOrder(orderId, order, "algoOrder");
125
162
  }, []);
126
163
  const _cancelOrder = useCallback((orderId, type, symbol)=>{
127
164
  switch(type){
@@ -171,6 +208,31 @@ export const useOrderStream = (/**
171
208
  const loadMore = ()=>{
172
209
  ordersResponse.setSize(ordersResponse.size + 1);
173
210
  };
211
+ // const cancelTPSLOrder = useCallback((orderId:number, symbol:string)=>{
212
+ // return
213
+ // });
214
+ const cancelTPSLChildOrder = useCallback((orderId, rootAlgoOrderId)=>{
215
+ return doUpdateAlgoOrder({
216
+ order_id: rootAlgoOrderId,
217
+ child_orders: [
218
+ {
219
+ order_id: orderId,
220
+ is_activated: false
221
+ }
222
+ ]
223
+ });
224
+ }, []);
225
+ const updateTPSLOrder = useCallback((/**
226
+ * the root algo order id
227
+ */ orderId, childOrders)=>{
228
+ if (!Array.isArray(childOrders)) {
229
+ throw new SDKError("children orders is required");
230
+ }
231
+ return doUpdateAlgoOrder({
232
+ order_id: orderId,
233
+ children_orders: childOrders
234
+ });
235
+ }, []);
174
236
  return [
175
237
  orders,
176
238
  {
@@ -179,10 +241,13 @@ export const useOrderStream = (/**
179
241
  refresh: ordersResponse.mutate,
180
242
  loadMore,
181
243
  cancelAllOrders,
244
+ cancelAllAlgoOrders,
182
245
  updateOrder,
183
246
  cancelOrder,
184
247
  updateAlgoOrder,
185
248
  cancelAlgoOrder,
249
+ cancelTPSLChildOrder,
250
+ updateTPSLOrder,
186
251
  errors: {
187
252
  cancelOrder: cancelOrderError,
188
253
  updateOrder: updateOrderError,
@@ -0,0 +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":["usePrivateInfiniteQuery","useCallback","useEffect","useMemo","OrderStatus","AlgoOrderRootType","useMarkPricesStream","useMutation","version","useDataCenterContext","generateKeyFun","SDKError","useOrderStream","params","options","status","symbol","side","size","includes","excludes","data","markPrices","regesterKeyHandler","unregisterKeyHandler","doCancelOrder","error","cancelOrderError","isMutating","cancelMutating","doCancelAllOrders","doUpdateOrder","updateOrderError","updateMutating","doCanceAlgolOrder","cancelAlgoOrderError","cancelAlgoMutating","doCancelAllAlgoOrders","doUpdateAlgoOrder","updateAlgoOrderError","updateAlgoMutating","formatKey","value","key","stopOnUnmount","keeplive","ordersResponse","initialSize","formatter","revalidateOnFocus","flattenOrders","orders","map","item","rows","flat","length","filter","algo_type","NEW","INCOMPLETE","order","mark_price","POSITIONAL_TP_SL","TP_SL","quantity","child_orders","total","cancelAllOrders","Promise","all","cancelAllAlgoOrders","_updateOrder","orderId","type","order_id","price","trigger_price","updateOrder","updateAlgoOrder","_cancelOrder","source","then","res","success","mutate","Error","message","cancelOrder","cancelAlgoOrder","loadMore","setSize","cancelTPSLChildOrder","rootAlgoOrderId","is_activated","updateTPSLOrder","childOrders","Array","isArray","children_orders","isLoading","refresh","errors","submitting","updateAlglOrder"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useOrderbookStream.d.ts","sourceRoot":"","sources":["../../src/orderly/useOrderbookStream.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;AAErC,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,IAAI,EAAE,aAAa,EAAE,CAAC;CACzB,CAAC;AAyFF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,UACjB,MAAM,GAAG,SAAS,SAClB,MAAM,WACJ,OAAO,QACV,aAAa,KACpB,aAyDF,CAAC;AAgCF,eAAO,MAAM,cAAc,SAAU,aAAa,UAAU,aAAa;;;CAWxE,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC3B,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4IAA4I;IAC5I,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAIF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,WACnB,MAAM,YACL,aAAa,YACZ,gBAAgB;;;;;;;;;;;2BA8GgB,MAAM;;;;;;;;;IAmDnD,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
1
+ {"version":3,"file":"useOrderbookStream.d.ts","sourceRoot":"","sources":["../../src/orderly/useOrderbookStream.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;AAErC,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,IAAI,EAAE,aAAa,EAAE,CAAC;CACzB,CAAC;AAyFF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,UACjB,MAAM,GAAG,SAAS,SAClB,MAAM,WACJ,OAAO,QACV,aAAa,KACpB,aAyDF,CAAC;AAgCF,eAAO,MAAM,cAAc,SAAU,aAAa,UAAU,aAAa;;;CAWxE,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC3B,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4IAA4I;IAC5I,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAIF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,WACnB,MAAM,YACL,aAAa,YACZ,gBAAgB;;;;;;;;;;;2BAqHgB,MAAM;;;;;;;;;IAmDnD,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
@@ -4,7 +4,7 @@ import { useMarkPrice } from "./useMarkPrice";
4
4
  import { useWS } from "../useWS";
5
5
  import { useEventEmitter } from "../useEventEmitter";
6
6
  import { useSymbolsInfo } from "./useSymbolsInfo";
7
- import { Decimal } from "@orderly.network/utils";
7
+ import { Decimal, removeTrailingZeros } from "@orderly.network/utils";
8
8
  import { min } from "ramda";
9
9
  import { SDKError } from "@orderly.network/types";
10
10
  import orderbooksService from './orderbook.service';
@@ -41,7 +41,7 @@ const reduceItems = (depth, level, data, asks = false)=>{
41
41
  const priceStr = price.toString();
42
42
  const index = priceStr.indexOf(".");
43
43
  const decimal = priceStr.slice(index + 1);
44
- const decimalDepth = depth.toString().slice(2).length;
44
+ const decimalDepth = removeTrailingZeros(depth).toString().slice(2).length;
45
45
  const decimalStr = decimal.slice(0, min(decimal.length, decimalDepth));
46
46
  priceKey = new Decimal(priceStr.slice(0, index) + "." + decimalStr).toNumber();
47
47
  }
@@ -204,11 +204,18 @@ const INIT_DATA = {
204
204
  const prevMiddlePrice = useRef(0);
205
205
  const depths = useMemo(()=>{
206
206
  const tick = config("quote_tick");
207
+ if (typeof tick === 'undefined') return [];
208
+ try {
209
+ const base = new Decimal(tick);
210
+ return [
211
+ base.toNumber(),
212
+ base.mul(10).toNumber(),
213
+ base.mul(100).toNumber(),
214
+ base.mul(1000).toNumber()
215
+ ];
216
+ } catch (e) {}
207
217
  return [
208
- tick,
209
- tick * 10,
210
- tick * 100,
211
- tick * 1000
218
+ tick
212
219
  ];
213
220
  }, [
214
221
  config("quote_tick")
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/orderly/useOrderbookStream.ts"],"sourcesContent":["import {useCallback, useEffect, useMemo, useRef, useState} from \"react\";\nimport {useTickerStream} from \"./useTickerStream\";\nimport {useMarkPrice} from \"./useMarkPrice\";\nimport {useWS} from \"../useWS\";\nimport {useEventEmitter} from \"../useEventEmitter\";\nimport {useSymbolsInfo} from \"./useSymbolsInfo\";\nimport {Decimal} from \"@orderly.network/utils\";\nimport {max, min} from \"ramda\";\nimport {SDKError} from \"@orderly.network/types\";\nimport orderbooksService from './orderbook.service';\n\nexport type OrderBookItem = number[];\n\nexport type OrderbookData = {\n asks: OrderBookItem[];\n bids: OrderBookItem[];\n};\n\nconst paddingFn = (len: number) =>\n Array(len).fill([Number.NaN, Number.NaN, Number.NaN, Number.NaN] as OrderBookItem);\n\nconst asksSortFn = (a: OrderBookItem, b: OrderBookItem) => a[0] - b[0];\n\nconst bidsSortFn = (a: OrderBookItem, b: OrderBookItem) => b[0] - a[0];\n\n// const commonSortFn = (a: OrderBookItem, b: OrderBookItem) => b[0] - a[0];\n\nconst reduceItems = (\n depth: number | undefined,\n level: number,\n data: OrderBookItem[],\n asks = false\n) => {\n if (!Array.isArray(data) || data.length === 0) {\n return [];\n }\n let newData = [...data];\n const result: OrderBookItem[] = [];\n\n //\n\n if (typeof depth !== \"undefined\") {\n const prices = new Map<number, number[]>();\n for (let i = 0; i < data.length; i++) {\n const [price, quantity] = data[i];\n if (isNaN(price) || isNaN(quantity)) continue;\n let priceKey;\n\n if (asks) {\n priceKey = new Decimal(Math.ceil(price / depth)).mul(depth).toNumber();\n } else {\n priceKey = new Decimal(Math.floor(price / depth)).mul(depth).toNumber();\n }\n\n if (depth < 1 && depth > 0 && priceKey.toString().indexOf(\".\") !== -1) {\n const priceStr = price.toString();\n const index = priceStr.indexOf(\".\");\n const decimal = priceStr.slice(index + 1);\n const decimalDepth = depth.toString().slice(2).length;\n const decimalStr = decimal.slice(0, min(decimal.length, decimalDepth));\n priceKey = new Decimal(\n priceStr.slice(0, index) + \".\" + decimalStr\n ).toNumber();\n }\n\n // console.log(`reduce items price: ${price}, priceKey: ${priceKey}, depth: ${depth}, resetPriceKey: ${price.toString === priceKey.toString}`);\n // console.log(`ask: ${asks} reduce items price: ${priceKey}`);\n\n if (prices.has(priceKey)) {\n const item = prices.get(priceKey)!;\n const itemPrice = new Decimal(item[1]).add(quantity).toNumber();\n\n // prices.push([price, quantity]);\n prices.set(priceKey, [priceKey, itemPrice]);\n } else {\n prices.set(priceKey, [priceKey, quantity]);\n }\n }\n\n newData = Array.from(prices.values());\n }\n\n for (let i = 0; i < newData.length; i++) {\n const [price, quantity] = newData[i];\n if (isNaN(price) || isNaN(quantity)) continue;\n\n const newQuantity = new Decimal(quantity)\n .add(result.length > 0 ? result[result.length - 1][2] : 0)\n .toNumber();\n\n const newAmount = new Decimal(quantity * price)\n .add(result.length > 0 ? result[result.length - 1][3] : 0)\n .toNumber();\n\n result.push([price, quantity, newQuantity, newAmount]);\n // if the total is greater than the level, break\n // TODO:\n // if (i + 1 >= level) {\n // break;\n // }\n }\n\n return result;\n};\n\n/**\n * @name reduceOrderbook\n * @param depth\n * @param level\n * @param data\n */\nexport const reduceOrderbook = (\n depth: number | undefined,\n level: number,\n padding: boolean,\n data: OrderbookData,\n): OrderbookData => {\n let asks = reduceItems(depth, level, data.asks, true);\n\n let bids = reduceItems(depth, level, data.bids);\n\n /// not empty and asks.price <= bids.price\n if (asks.length !== 0 && bids.length !== 0 && asks[0][0] <= bids[0][0]) {\n if (asks.length === 1) {\n const [price, qty, newQuantity, newAmount] = asks[0];\n asks.shift();\n asks.push([price + (depth === undefined ? 0 : depth), qty, newQuantity, newAmount]);\n } else {\n const [bidPrice] = bids[0];\n while (asks.length > 0) {\n const [askPrice, askQty, newQuantity, newAmount] = asks[0];\n\n\n if (askPrice <= bidPrice) {\n // console.log(\"xxxxxxxxxxx reset ask list begin\", [...asks], { ...asks[0] });\n asks.shift();\n let logStr = \"\";\n for (let index = 0; index < asks.length; index++) {\n if (index === 0) {\n const quantity = asks[index][1] + askQty;\n asks[index][1] = quantity;\n asks[index][2] = quantity;\n // asks[index][3] += newAmount;\n // FIXME: fix this code later\n asks[index][3] = Math.ceil(quantity) * asks[index][0];\n } else {\n // asks[index][3] += newAmount;\n // FIXME: fix this code later\n asks[index][3] = asks[index][0] * asks[index][1] + asks[index - 1][3];\n }\n logStr += `index: ${index} ${asks[index]}\\n`;\n }\n // console.log(\"xxxxxxxxxxx reset ask list end\", logStr);\n } else {\n break;\n }\n }\n }\n }\n\n asks = asks.reverse();\n\n if (padding) {\n asks =\n asks.length < level ? paddingFn(level - asks.length).concat(asks) : asks;\n bids =\n bids.length < level ? bids.concat(paddingFn(level - bids.length)) : bids;\n }\n\n return {\n asks: asks,\n bids: bids,\n };\n};\n\nconst mergeItems = (data: OrderBookItem[], update: OrderBookItem[]) => {\n // let index = -1;\n if (data.length === 0) return update;\n\n data = data.filter(([price]) => !isNaN(price));\n\n while (update.length > 0) {\n const item = update.shift();\n //\n if (item) {\n const [price, quantity] = item;\n\n const index = data.findIndex(([p], index) => p === price);\n //\n if (index === -1) {\n if (quantity === 0) continue;\n data.push(item);\n } else {\n if (quantity === 0) {\n data.splice(index, 1);\n } else {\n data[index] = item;\n }\n }\n }\n }\n\n return data;\n};\n\nexport const mergeOrderbook = (data: OrderbookData, update: OrderbookData) => {\n let asks = [...data.asks];\n let bids = [...data.bids];\n\n asks = mergeItems(asks, update.asks).sort(asksSortFn);\n bids = mergeItems(bids, update.bids).sort(bidsSortFn);\n\n return {\n asks: asks,\n bids: bids,\n };\n};\n\n/**\n * Configuration for the Order Book\n */\nexport type OrderbookOptions = {\n /** Indicates the number of data entries to return for ask/bid, default is 10 */\n level?: number;\n /** Whether to fill in when the actual data entries are less than the level. If filled, it will add [nan, nan, nan, nan]. Default is true */\n padding?: boolean;\n};\n\nconst INIT_DATA = {asks: [], bids: []};\n\n/**\n * @name useOrderbookStream\n * @description React hook that returns the current orderbook for a given market\n */\nexport const useOrderbookStream = (\n symbol: string,\n initial: OrderbookData = INIT_DATA,\n options?: OrderbookOptions\n) => {\n if (!symbol) {\n throw new SDKError(\"useOrderbookStream requires a symbol\");\n }\n\n const level = options?.level ?? 10;\n const padding = options?.padding ?? true;\n\n const [requestData, setRequestData] = useState<OrderbookData | null>(null);\n const [data, setData] = useState<OrderbookData>(initial);\n const [isLoading, setIsLoading] = useState(true);\n // const [level, setLevel] = useState(() => options?.level ?? 10);\n\n const config = useSymbolsInfo()[symbol];\n\n const [depth, setDepth] = useState<number | undefined>();\n\n // markPrice, lastPrice\n const prevMiddlePrice = useRef<number>(0);\n\n const depths = useMemo(() => {\n const tick = config(\"quote_tick\");\n\n return [tick, tick * 10, tick * 100, tick * 1000];\n }, [config(\"quote_tick\")]);\n\n useEffect(() => {\n setDepth(config(\"quote_tick\"));\n }, [config(\"quote_tick\")]);\n\n const ws = useWS();\n\n const ticker = useTickerStream(symbol);\n\n const eventEmitter = useEventEmitter();\n\n // const orderbookRequest =\n\n useEffect(() => {\n let needRequestFullOrderbook= true;\n setIsLoading(true);\n let orderBookUpdateSub: any;\n let fullOrderBookUpdateSub: any;\n orderBookUpdateSub = ws.subscribe(\n {\n event: \"subscribe\",\n topic: `${symbol}@orderbookupdate`,\n },\n {\n formatter: (message) => message,\n onMessage: (message: any) => {\n const {data: wsData, ts} = message;\n const {asks, bids, prevTs} = wsData;\n orderbooksService.updateOrderbook(symbol, {asks, bids, ts, prevTs}, () => needRequestFullOrderbook = true);\n\n\n const data = orderbooksService.getRawOrderbook(symbol);\n setData({bids: data.bids, asks: data.asks});\n\n }\n }\n )\n\n if ( needRequestFullOrderbook) {\n setIsLoading(true);\n\n fullOrderBookUpdateSub = ws.onceSubscribe(\n {\n event: \"request\",\n id: `${symbol}@orderbook`,\n params: {\n type: \"orderbook\",\n symbol: symbol,\n },\n },\n {\n formatter: (message) => message,\n onMessage: (message: any) => {\n const {symbol, asks, bids, ts} = message.data;\n orderbooksService.setFullOrderbook(symbol, {asks, bids, ts})\n const data = orderbooksService.getRawOrderbook(symbol);\n setData({bids: data.bids, asks: data.asks});\n\n setIsLoading(false);\n },\n }\n )\n needRequestFullOrderbook= false;\n }\n\n return () => {\n // unsubscribe\n orderBookUpdateSub?.();\n fullOrderBookUpdateSub?.();\n orderbooksService.resetOrderBook(symbol);\n setData(INIT_DATA);\n }\n\n }, [symbol]);\n\n // const {data:markPrices} = useMarkPricesStream();\n\n const {data: markPrice} = useMarkPrice(symbol);\n\n\n const onItemClick = useCallback((item: OrderBookItem) => {\n eventEmitter.emit(\"orderbook:item:click\", item);\n }, []);\n\n const onDepthChange = useCallback((depth: number) => {\n //\n setDepth(() => depth);\n }, []);\n\n\n const reducedData = reduceOrderbook(depth, level, padding, {\n asks: [...data.asks],\n bids: [...data.bids],\n });\n\n // emit the asks0 and bids0\n useEffect(() => {\n const updateData = [\n reducedData.asks?.[reducedData.asks.length - 1]?.[0],\n reducedData.bids?.[0]?.[0]\n ];\n eventEmitter.emit(\"orderbook:update\", updateData);\n }, [reducedData.asks?.[reducedData.asks.length - 1]?.[0], reducedData.bids?.[0]?.[0]]);\n\n const middlePrice = useMemo(() => {\n let asksFrist = 0,\n bidsFirst = 0;\n\n if (data.asks.length > 0) {\n asksFrist = reducedData.asks?.[reducedData.asks.length - 1]?.[0];\n }\n\n if (data.bids.length > 0) {\n bidsFirst = data.bids[0][0];\n }\n\n if (isNaN(asksFrist) || isNaN(bidsFirst) || !ticker) return 0;\n\n\n return [asksFrist, bidsFirst, ticker[\"24h_close\"]].sort()[1];\n }, [ticker?.[\"24h_close\"], data]);\n\n useEffect(() => {\n prevMiddlePrice.current = middlePrice;\n }, [middlePrice]);\n\n return [\n {\n asks: reducedData.asks.slice(-level),\n bids: reducedData.bids.slice(0, level),\n markPrice: markPrice,\n middlePrice: [prevMiddlePrice.current, middlePrice],\n },\n {onDepthChange, depth, allDepths: depths, isLoading, onItemClick},\n ];\n};\n\nexport type useOrderbookStreamReturn = ReturnType<typeof useOrderbookStream>;\n"],"names":["useCallback","useEffect","useMemo","useRef","useState","useTickerStream","useMarkPrice","useWS","useEventEmitter","useSymbolsInfo","Decimal","min","SDKError","orderbooksService","paddingFn","len","Array","fill","Number","NaN","asksSortFn","a","b","bidsSortFn","reduceItems","depth","level","data","asks","isArray","length","newData","result","prices","Map","i","price","quantity","isNaN","priceKey","Math","ceil","mul","toNumber","floor","toString","indexOf","priceStr","index","decimal","slice","decimalDepth","decimalStr","has","item","get","itemPrice","add","set","from","values","newQuantity","newAmount","push","reduceOrderbook","padding","bids","qty","shift","undefined","bidPrice","askPrice","askQty","logStr","reverse","concat","mergeItems","update","filter","findIndex","p","splice","mergeOrderbook","sort","INIT_DATA","useOrderbookStream","symbol","initial","options","requestData","setRequestData","setData","isLoading","setIsLoading","config","setDepth","prevMiddlePrice","depths","tick","ws","ticker","eventEmitter","needRequestFullOrderbook","orderBookUpdateSub","fullOrderBookUpdateSub","subscribe","event","topic","formatter","message","onMessage","wsData","ts","prevTs","updateOrderbook","getRawOrderbook","onceSubscribe","id","params","type","setFullOrderbook","resetOrderBook","markPrice","onItemClick","emit","onDepthChange","reducedData","updateData","middlePrice","asksFrist","bidsFirst","current","allDepths"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../src/orderly/useOrderbookStream.ts"],"sourcesContent":["import {useCallback, useEffect, useMemo, useRef, useState} from \"react\";\nimport {useTickerStream} from \"./useTickerStream\";\nimport {useMarkPrice} from \"./useMarkPrice\";\nimport {useWS} from \"../useWS\";\nimport {useEventEmitter} from \"../useEventEmitter\";\nimport {useSymbolsInfo} from \"./useSymbolsInfo\";\nimport {Decimal, removeTrailingZeros} from \"@orderly.network/utils\";\nimport {max, min} from \"ramda\";\nimport {SDKError} from \"@orderly.network/types\";\nimport orderbooksService from './orderbook.service';\n\nexport type OrderBookItem = number[];\n\nexport type OrderbookData = {\n asks: OrderBookItem[];\n bids: OrderBookItem[];\n};\n\nconst paddingFn = (len: number) =>\n Array(len).fill([Number.NaN, Number.NaN, Number.NaN, Number.NaN] as OrderBookItem);\n\nconst asksSortFn = (a: OrderBookItem, b: OrderBookItem) => a[0] - b[0];\n\nconst bidsSortFn = (a: OrderBookItem, b: OrderBookItem) => b[0] - a[0];\n\n// const commonSortFn = (a: OrderBookItem, b: OrderBookItem) => b[0] - a[0];\n\nconst reduceItems = (\n depth: number | undefined,\n level: number,\n data: OrderBookItem[],\n asks = false\n) => {\n if (!Array.isArray(data) || data.length === 0) {\n return [];\n }\n let newData = [...data];\n const result: OrderBookItem[] = [];\n\n //\n\n if (typeof depth !== \"undefined\") {\n const prices = new Map<number, number[]>();\n for (let i = 0; i < data.length; i++) {\n const [price, quantity] = data[i];\n if (isNaN(price) || isNaN(quantity)) continue;\n let priceKey;\n\n if (asks) {\n priceKey = new Decimal(Math.ceil(price / depth)).mul(depth).toNumber();\n } else {\n priceKey = new Decimal(Math.floor(price / depth)).mul(depth).toNumber();\n }\n\n if (depth < 1 && depth > 0 && priceKey.toString().indexOf(\".\") !== -1) {\n const priceStr = price.toString();\n const index = priceStr.indexOf(\".\");\n const decimal = priceStr.slice(index + 1);\n const decimalDepth = removeTrailingZeros(depth).toString().slice(2).length;\n const decimalStr = decimal.slice(0, min(decimal.length, decimalDepth));\n priceKey = new Decimal(\n priceStr.slice(0, index) + \".\" + decimalStr\n ).toNumber();\n }\n\n // console.log(`reduce items price: ${price}, priceKey: ${priceKey}, depth: ${depth}, resetPriceKey: ${price.toString === priceKey.toString}`);\n // console.log(`ask: ${asks} reduce items price: ${priceKey}`);\n\n if (prices.has(priceKey)) {\n const item = prices.get(priceKey)!;\n const itemPrice = new Decimal(item[1]).add(quantity).toNumber();\n\n // prices.push([price, quantity]);\n prices.set(priceKey, [priceKey, itemPrice]);\n } else {\n prices.set(priceKey, [priceKey, quantity]);\n }\n }\n\n newData = Array.from(prices.values());\n }\n\n for (let i = 0; i < newData.length; i++) {\n const [price, quantity] = newData[i];\n if (isNaN(price) || isNaN(quantity)) continue;\n\n const newQuantity = new Decimal(quantity)\n .add(result.length > 0 ? result[result.length - 1][2] : 0)\n .toNumber();\n\n const newAmount = new Decimal(quantity * price)\n .add(result.length > 0 ? result[result.length - 1][3] : 0)\n .toNumber();\n\n result.push([price, quantity, newQuantity, newAmount]);\n // if the total is greater than the level, break\n // TODO:\n // if (i + 1 >= level) {\n // break;\n // }\n }\n\n return result;\n};\n\n/**\n * @name reduceOrderbook\n * @param depth\n * @param level\n * @param data\n */\nexport const reduceOrderbook = (\n depth: number | undefined,\n level: number,\n padding: boolean,\n data: OrderbookData,\n): OrderbookData => {\n let asks = reduceItems(depth, level, data.asks, true);\n\n let bids = reduceItems(depth, level, data.bids);\n\n /// not empty and asks.price <= bids.price\n if (asks.length !== 0 && bids.length !== 0 && asks[0][0] <= bids[0][0]) {\n if (asks.length === 1) {\n const [price, qty, newQuantity, newAmount] = asks[0];\n asks.shift();\n asks.push([price + (depth === undefined ? 0 : depth), qty, newQuantity, newAmount]);\n } else {\n const [bidPrice] = bids[0];\n while (asks.length > 0) {\n const [askPrice, askQty, newQuantity, newAmount] = asks[0];\n\n\n if (askPrice <= bidPrice) {\n // console.log(\"xxxxxxxxxxx reset ask list begin\", [...asks], { ...asks[0] });\n asks.shift();\n let logStr = \"\";\n for (let index = 0; index < asks.length; index++) {\n if (index === 0) {\n const quantity = asks[index][1] + askQty;\n asks[index][1] = quantity;\n asks[index][2] = quantity;\n // asks[index][3] += newAmount;\n // FIXME: fix this code later\n asks[index][3] = Math.ceil(quantity) * asks[index][0];\n } else {\n // asks[index][3] += newAmount;\n // FIXME: fix this code later\n asks[index][3] = asks[index][0] * asks[index][1] + asks[index - 1][3];\n }\n logStr += `index: ${index} ${asks[index]}\\n`;\n }\n // console.log(\"xxxxxxxxxxx reset ask list end\", logStr);\n } else {\n break;\n }\n }\n }\n }\n\n asks = asks.reverse();\n\n if (padding) {\n asks =\n asks.length < level ? paddingFn(level - asks.length).concat(asks) : asks;\n bids =\n bids.length < level ? bids.concat(paddingFn(level - bids.length)) : bids;\n }\n\n return {\n asks: asks,\n bids: bids,\n };\n};\n\nconst mergeItems = (data: OrderBookItem[], update: OrderBookItem[]) => {\n // let index = -1;\n if (data.length === 0) return update;\n\n data = data.filter(([price]) => !isNaN(price));\n\n while (update.length > 0) {\n const item = update.shift();\n //\n if (item) {\n const [price, quantity] = item;\n\n const index = data.findIndex(([p], index) => p === price);\n //\n if (index === -1) {\n if (quantity === 0) continue;\n data.push(item);\n } else {\n if (quantity === 0) {\n data.splice(index, 1);\n } else {\n data[index] = item;\n }\n }\n }\n }\n\n return data;\n};\n\nexport const mergeOrderbook = (data: OrderbookData, update: OrderbookData) => {\n let asks = [...data.asks];\n let bids = [...data.bids];\n\n asks = mergeItems(asks, update.asks).sort(asksSortFn);\n bids = mergeItems(bids, update.bids).sort(bidsSortFn);\n\n return {\n asks: asks,\n bids: bids,\n };\n};\n\n/**\n * Configuration for the Order Book\n */\nexport type OrderbookOptions = {\n /** Indicates the number of data entries to return for ask/bid, default is 10 */\n level?: number;\n /** Whether to fill in when the actual data entries are less than the level. If filled, it will add [nan, nan, nan, nan]. Default is true */\n padding?: boolean;\n};\n\nconst INIT_DATA = {asks: [], bids: []};\n\n/**\n * @name useOrderbookStream\n * @description React hook that returns the current orderbook for a given market\n */\nexport const useOrderbookStream = (\n symbol: string,\n initial: OrderbookData = INIT_DATA,\n options?: OrderbookOptions\n) => {\n if (!symbol) {\n throw new SDKError(\"useOrderbookStream requires a symbol\");\n }\n\n const level = options?.level ?? 10;\n const padding = options?.padding ?? true;\n\n const [requestData, setRequestData] = useState<OrderbookData | null>(null);\n const [data, setData] = useState<OrderbookData>(initial);\n const [isLoading, setIsLoading] = useState(true);\n // const [level, setLevel] = useState(() => options?.level ?? 10);\n\n const config = useSymbolsInfo()[symbol];\n\n const [depth, setDepth] = useState<number | undefined>();\n\n // markPrice, lastPrice\n const prevMiddlePrice = useRef<number>(0);\n\n const depths = useMemo(() => {\n const tick = config(\"quote_tick\");\n if (typeof tick === 'undefined') return [];\n\n try {\n const base = new Decimal(tick);\n return [base.toNumber(), base.mul(10).toNumber(), base.mul(100).toNumber(), base.mul(1000).toNumber()];\n } catch (e) {\n\n }\n return [tick];\n }, [config(\"quote_tick\")]);\n\n useEffect(() => {\n setDepth(config(\"quote_tick\"));\n }, [config(\"quote_tick\")]);\n\n const ws = useWS();\n\n const ticker = useTickerStream(symbol);\n\n const eventEmitter = useEventEmitter();\n\n // const orderbookRequest =\n\n useEffect(() => {\n let needRequestFullOrderbook= true;\n setIsLoading(true);\n let orderBookUpdateSub: any;\n let fullOrderBookUpdateSub: any;\n orderBookUpdateSub = ws.subscribe(\n {\n event: \"subscribe\",\n topic: `${symbol}@orderbookupdate`,\n },\n {\n formatter: (message) => message,\n onMessage: (message: any) => {\n const {data: wsData, ts} = message;\n const {asks, bids, prevTs} = wsData;\n orderbooksService.updateOrderbook(symbol, {asks, bids, ts, prevTs}, () => needRequestFullOrderbook = true);\n\n\n const data = orderbooksService.getRawOrderbook(symbol);\n setData({bids: data.bids, asks: data.asks});\n\n }\n }\n )\n\n if ( needRequestFullOrderbook) {\n setIsLoading(true);\n\n fullOrderBookUpdateSub = ws.onceSubscribe(\n {\n event: \"request\",\n id: `${symbol}@orderbook`,\n params: {\n type: \"orderbook\",\n symbol: symbol,\n },\n },\n {\n formatter: (message) => message,\n onMessage: (message: any) => {\n const {symbol, asks, bids, ts} = message.data;\n orderbooksService.setFullOrderbook(symbol, {asks, bids, ts})\n const data = orderbooksService.getRawOrderbook(symbol);\n setData({bids: data.bids, asks: data.asks});\n\n setIsLoading(false);\n },\n }\n )\n needRequestFullOrderbook= false;\n }\n\n return () => {\n // unsubscribe\n orderBookUpdateSub?.();\n fullOrderBookUpdateSub?.();\n orderbooksService.resetOrderBook(symbol);\n setData(INIT_DATA);\n }\n\n }, [symbol]);\n\n // const {data:markPrices} = useMarkPricesStream();\n\n const {data: markPrice} = useMarkPrice(symbol);\n\n\n const onItemClick = useCallback((item: OrderBookItem) => {\n eventEmitter.emit(\"orderbook:item:click\", item);\n }, []);\n\n const onDepthChange = useCallback((depth: number) => {\n //\n setDepth(() => depth);\n }, []);\n\n\n const reducedData = reduceOrderbook(depth, level, padding, {\n asks: [...data.asks],\n bids: [...data.bids],\n });\n\n // emit the asks0 and bids0\n useEffect(() => {\n const updateData = [\n reducedData.asks?.[reducedData.asks.length - 1]?.[0],\n reducedData.bids?.[0]?.[0]\n ];\n eventEmitter.emit(\"orderbook:update\", updateData);\n }, [reducedData.asks?.[reducedData.asks.length - 1]?.[0], reducedData.bids?.[0]?.[0]]);\n\n const middlePrice = useMemo(() => {\n let asksFrist = 0,\n bidsFirst = 0;\n\n if (data.asks.length > 0) {\n asksFrist = reducedData.asks?.[reducedData.asks.length - 1]?.[0];\n }\n\n if (data.bids.length > 0) {\n bidsFirst = data.bids[0][0];\n }\n\n if (isNaN(asksFrist) || isNaN(bidsFirst) || !ticker) return 0;\n\n\n return [asksFrist, bidsFirst, ticker[\"24h_close\"]].sort()[1];\n }, [ticker?.[\"24h_close\"], data]);\n\n useEffect(() => {\n prevMiddlePrice.current = middlePrice;\n }, [middlePrice]);\n\n return [\n {\n asks: reducedData.asks.slice(-level),\n bids: reducedData.bids.slice(0, level),\n markPrice: markPrice,\n middlePrice: [prevMiddlePrice.current, middlePrice],\n },\n {onDepthChange, depth, allDepths: depths, isLoading, onItemClick},\n ];\n};\n\nexport type useOrderbookStreamReturn = ReturnType<typeof useOrderbookStream>;\n"],"names":["useCallback","useEffect","useMemo","useRef","useState","useTickerStream","useMarkPrice","useWS","useEventEmitter","useSymbolsInfo","Decimal","removeTrailingZeros","min","SDKError","orderbooksService","paddingFn","len","Array","fill","Number","NaN","asksSortFn","a","b","bidsSortFn","reduceItems","depth","level","data","asks","isArray","length","newData","result","prices","Map","i","price","quantity","isNaN","priceKey","Math","ceil","mul","toNumber","floor","toString","indexOf","priceStr","index","decimal","slice","decimalDepth","decimalStr","has","item","get","itemPrice","add","set","from","values","newQuantity","newAmount","push","reduceOrderbook","padding","bids","qty","shift","undefined","bidPrice","askPrice","askQty","logStr","reverse","concat","mergeItems","update","filter","findIndex","p","splice","mergeOrderbook","sort","INIT_DATA","useOrderbookStream","symbol","initial","options","requestData","setRequestData","setData","isLoading","setIsLoading","config","setDepth","prevMiddlePrice","depths","tick","base","e","ws","ticker","eventEmitter","needRequestFullOrderbook","orderBookUpdateSub","fullOrderBookUpdateSub","subscribe","event","topic","formatter","message","onMessage","wsData","ts","prevTs","updateOrderbook","getRawOrderbook","onceSubscribe","id","params","type","setFullOrderbook","resetOrderBook","markPrice","onItemClick","emit","onDepthChange","reducedData","updateData","middlePrice","asksFrist","bidsFirst","current","allDepths"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -10,7 +10,7 @@ export interface PositionReturn {
10
10
  export declare const usePositionStream: (symbol?: string, options?: SWRConfiguration & {
11
11
  calcMode?: PriceMode;
12
12
  }) => readonly [{
13
- readonly rows: API.PositionExt[] | null;
13
+ readonly rows: API.PositionTPSLExt[] | null;
14
14
  readonly aggregated: any;
15
15
  readonly totalCollateral: Decimal;
16
16
  readonly totalValue: Decimal;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePositionStream.d.ts","sourceRoot":"","sources":["../../../src/orderly/usePositionStream/usePositionStream.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,KAAK,CAAC;AAG5C,OAAO,EACL,KAAK,GAAG,EACR,WAAW,EAIZ,MAAM,wBAAwB,CAAC;AAKhC,OAAO,EAAE,OAAO,EAAQ,MAAM,wBAAwB,CAAC;AASvD,KAAK,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC;AAE3C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,CACL,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,GAAG,aAAa,GAAG,MAAM,CAAC,KAC5D,IAAI,CAAC;CACX;AAED,eAAO,MAAM,iBAAiB,YAInB,MAAM,YACL,gBAAgB,GAAG;IAAE,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE;;;;;;;;;;;;;;;;;;;;;;;EAiStD,CAAC;AAEF,eAAO,MAAM,yBAAyB,sBAIpC,CAAC"}
@@ -1,14 +1,17 @@
1
1
  import { useEffect, useMemo, useState } from "react";
2
- import { usePrivateQuery } from "../usePrivateQuery";
2
+ import { usePrivateQuery } from "../../usePrivateQuery";
3
3
  import { account, positions } from "@orderly.network/perp";
4
- import { createGetter } from "../utils/createGetter";
5
- import { useFundingRates } from "./useFundingRates";
6
- import { useSymbolsInfo } from "./useSymbolsInfo";
7
- import { useMarkPricesStream } from "./useMarkPricesStream";
4
+ import { createGetter } from "../../utils/createGetter";
5
+ import { useFundingRates } from "../useFundingRates";
6
+ import { AlgoOrderRootType, OrderStatus } from "@orderly.network/types";
7
+ import { useSymbolsInfo } from "../useSymbolsInfo";
8
+ import { useMarkPricesStream } from "../useMarkPricesStream";
8
9
  import { pathOr, propOr } from "ramda";
9
- import { parseHolding } from "../utils/parseHolding";
10
+ import { parseHolding } from "../../utils/parseHolding";
10
11
  import { zero } from "@orderly.network/utils";
11
- import { useMarketsStream } from "./useMarketsStream";
12
+ import { useMarketsStream } from "../useMarketsStream";
13
+ import { useOrderStream } from "../orderlyHooks";
14
+ import { findPositionTPSLFromOrders, findTPSLFromOrder } from "./utils";
12
15
  export const usePositionStream = (/**
13
16
  * If symbol is passed, only the position of that symbol will be returned.
14
17
  */ symbol, options)=>{
@@ -31,6 +34,16 @@ export const usePositionStream = (/**
31
34
  onError: (err)=>{}
32
35
  });
33
36
  const { data: markPrices } = useMarkPricesStream();
37
+ // get TP/SL orders;
38
+ const [tpslOrders] = useOrderStream({
39
+ status: OrderStatus.INCOMPLETE,
40
+ includes: [
41
+ AlgoOrderRootType.POSITIONAL_TP_SL,
42
+ AlgoOrderRootType.TP_SL
43
+ ]
44
+ });
45
+ //
46
+ // console.log("---------------");
34
47
  const [priceMode, setPriceMode] = useState(options?.calcMode || "markPrice");
35
48
  useEffect(()=>{
36
49
  if (options?.calcMode && priceMode !== options?.calcMode) {
@@ -40,8 +53,6 @@ export const usePositionStream = (/**
40
53
  options?.calcMode
41
54
  ]);
42
55
  const { data: tickers } = useMarketsStream();
43
- // console.log("mark prices", markPrices);
44
- // console.log("tickers", tickers);
45
56
  const tickerPrices = useMemo(()=>{
46
57
  const data = Object.create(null);
47
58
  tickers?.forEach((item)=>{
@@ -172,6 +183,8 @@ export const usePositionStream = (/**
172
183
  const total = totalCollateral.toNumber();
173
184
  let rows = formatedPositions[0].filter((item)=>item.position_qty !== 0).map((item)=>{
174
185
  const info = symbolInfo?.[item.symbol];
186
+ const related_order = Array.isArray(tpslOrders) ? findPositionTPSLFromOrders(tpslOrders, item.symbol) : undefined;
187
+ const tp_sl_pricer = !!related_order ? findTPSLFromOrder(related_order) : undefined;
175
188
  const MMR = positions.MMR({
176
189
  baseMMR: info("base_mmr"),
177
190
  baseIMR: info("base_imr"),
@@ -186,13 +199,12 @@ export const usePositionStream = (/**
186
199
  markPrice: item.mark_price,
187
200
  MMR
188
201
  }),
189
- // est_liq_price: positions.liqPrice({
190
- // markPrice: item.mark_price,
191
- // totalCollateral: total,
192
- // positionQty: item.position_qty,
193
- // MMR,
194
- // }),
195
- mmr: MMR
202
+ tp_trigger_price: tp_sl_pricer?.tp_trigger_price,
203
+ sl_trigger_price: tp_sl_pricer?.sl_trigger_price,
204
+ mmr: MMR,
205
+ // has_position_tp_sl:
206
+ // !tp_sl_pricer?.sl_trigger_price && !tp_sl_pricer?.tp_trigger_price,
207
+ algo_order: related_order
196
208
  };
197
209
  });
198
210
  // calculate est_liq_price
@@ -214,13 +226,9 @@ export const usePositionStream = (/**
214
226
  formatedPositions,
215
227
  symbolInfo,
216
228
  accountInfo,
217
- totalCollateral
229
+ totalCollateral,
230
+ tpslOrders
218
231
  ]);
219
- // useEffect(() => {
220
- // ee.on("positions:changed", () => {
221
- // updatePositions();
222
- // });
223
- // }, []);
224
232
  const positionInfoGetter = createGetter(data, 1);
225
233
  return [
226
234
  {
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/orderly/usePositionStream/usePositionStream.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport { usePrivateQuery } from \"../../usePrivateQuery\";\nimport { account, positions } from \"@orderly.network/perp\";\nimport { type SWRConfiguration } from \"swr\";\nimport { createGetter } from \"../../utils/createGetter\";\nimport { useFundingRates } from \"../useFundingRates\";\nimport {\n type API,\n OrderEntity,\n AlgoOrderType,\n AlgoOrderRootType,\n OrderStatus,\n} from \"@orderly.network/types\";\nimport { useSymbolsInfo } from \"../useSymbolsInfo\";\nimport { useMarkPricesStream } from \"../useMarkPricesStream\";\nimport { pathOr, propOr } from \"ramda\";\nimport { parseHolding } from \"../../utils/parseHolding\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\nimport { useMarketsStream } from \"../useMarketsStream\";\nimport { useOrderStream } from \"../orderlyHooks\";\nimport {\n findPositionTPSLFromOrders,\n findTPSLFromOrder,\n findTPSLFromOrders,\n} from \"./utils\";\n\ntype PriceMode = \"markPrice\" | \"lastPrice\";\n\nexport interface PositionReturn {\n data: any[];\n loading: boolean;\n close: (\n order: Pick<OrderEntity, \"order_type\" | \"order_price\" | \"side\">\n ) => void;\n}\n\nexport const usePositionStream = (\n /**\n * If symbol is passed, only the position of that symbol will be returned.\n */\n symbol?: string,\n options?: SWRConfiguration & { calcMode?: PriceMode }\n) => {\n const symbolInfo = useSymbolsInfo();\n const { data: accountInfo } =\n usePrivateQuery<API.AccountInfo>(\"/v1/client/info\");\n\n const { data: holding } = usePrivateQuery<API.Holding[]>(\n \"/v1/client/holding\",\n {\n formatter: (data) => {\n return data.holding;\n },\n }\n );\n\n const fundingRates = useFundingRates();\n\n const {\n data,\n error,\n mutate: refreshPositions,\n } = usePrivateQuery<API.PositionInfo>(`/v1/positions`, {\n // revalidateOnFocus: false,\n // revalidateOnReconnect: false,\n // dedupingInterval: 200,\n // keepPreviousData: false,\n // revalidateIfStale: true,\n ...options,\n\n formatter: (data) => data,\n onError: (err) => {},\n });\n\n const { data: markPrices } = useMarkPricesStream();\n\n // get TP/SL orders;\n\n const [tpslOrders] = useOrderStream({\n status: OrderStatus.INCOMPLETE,\n includes: [AlgoOrderRootType.POSITIONAL_TP_SL, AlgoOrderRootType.TP_SL],\n });\n //\n\n // console.log(\"---------------\");\n\n const [priceMode, setPriceMode] = useState(options?.calcMode || \"markPrice\");\n\n useEffect(() => {\n if (options?.calcMode && priceMode !== options?.calcMode) {\n setPriceMode(options?.calcMode);\n }\n }, [options?.calcMode]);\n\n const { data: tickers } = useMarketsStream();\n\n const tickerPrices = useMemo(() => {\n const data: Record<string, number> = Object.create(null);\n tickers?.forEach((item) => {\n // @ts-ignore\n data[item.symbol] = item[\"24h_close\"];\n });\n return data;\n }, [tickers]);\n\n const formatedPositions = useMemo<[API.PositionExt[], any] | null>(() => {\n if (!data?.rows || symbolInfo.isNil || !accountInfo) return null;\n\n const filteredData =\n typeof symbol === \"undefined\" || symbol === \"\"\n ? data.rows\n : data.rows.filter((item) => {\n return item.symbol === symbol;\n });\n\n let unrealPnL_total = zero,\n notional_total = zero,\n unsettlementPnL_total = zero;\n\n const formatted = filteredData.map((item: API.Position) => {\n // const price = (markPrices as any)[item.symbol] ?? item.mark_price;\n const unRealizedPrice = propOr(\n item.mark_price,\n item.symbol,\n priceMode === \"markPrice\" ? markPrices : tickerPrices\n ) as unknown as number;\n\n const price = propOr(\n item.mark_price,\n item.symbol,\n markPrices\n ) as unknown as number;\n\n const info = symbolInfo[item.symbol];\n //\n\n const notional = positions.notional(item.position_qty, price);\n\n const unrealPnl = positions.unrealizedPnL({\n qty: item.position_qty,\n openPrice: item?.average_open_price,\n markPrice: unRealizedPrice,\n });\n\n const imr = account.IMR({\n maxLeverage: accountInfo.max_leverage,\n baseIMR: info(\"base_imr\"),\n IMR_Factor: accountInfo.imr_factor[item.symbol] as number,\n positionNotional: notional,\n ordersNotional: 0,\n IMR_factor_power: 4 / 5,\n });\n\n const unrealPnlROI = positions.unrealizedPnLROI({\n positionQty: item.position_qty,\n openPrice: item.average_open_price,\n IMR: imr,\n unrealizedPnL: unrealPnl,\n });\n\n const unsettlementPnL = positions.unsettlementPnL({\n positionQty: item.position_qty,\n markPrice: price,\n costPosition: item.cost_position,\n sumUnitaryFunding: fundingRates[item.symbol]?.(\n \"sum_unitary_funding\",\n 0\n ),\n lastSumUnitaryFunding: item.last_sum_unitary_funding,\n });\n\n unrealPnL_total = unrealPnL_total.add(unrealPnl);\n notional_total = notional_total.add(notional);\n unsettlementPnL_total = unsettlementPnL_total.add(unsettlementPnL);\n\n return {\n ...item,\n mark_price: price,\n mm: 0,\n notional,\n unsettlement_pnl: unsettlementPnL,\n unrealized_pnl: unrealPnl,\n unrealized_pnl_ROI: unrealPnlROI,\n };\n });\n\n return [\n formatted,\n {\n unrealPnL: unrealPnL_total.toNumber(),\n notional: notional_total.toNumber(),\n unsettledPnL: unsettlementPnL_total.toNumber(),\n },\n ];\n }, [\n data?.rows,\n symbolInfo,\n accountInfo,\n markPrices,\n priceMode,\n tickerPrices,\n symbol,\n holding,\n ]);\n\n // const showSymbol = useCallback((symbol: string) => {\n // setVisibleSymbol(symbol);\n // }, []);\n\n const [totalCollateral, totalValue, totalUnrealizedROI] = useMemo<\n [Decimal, Decimal, number]\n >(() => {\n if (!holding || !markPrices) {\n return [zero, zero, 0];\n }\n const unsettlemnedPnL = pathOr(0, [1, \"unsettledPnL\"])(formatedPositions);\n const unrealizedPnL = pathOr(0, [1, \"unrealPnL\"])(formatedPositions);\n\n const [USDC_holding, nonUSDC] = parseHolding(holding, markPrices);\n\n const totalCollateral = account.totalCollateral({\n USDCHolding: USDC_holding,\n nonUSDCHolding: nonUSDC,\n unsettlementPnL: unsettlemnedPnL,\n });\n\n const totalValue = account.totalValue({\n totalUnsettlementPnL: unsettlemnedPnL,\n USDCHolding: USDC_holding,\n nonUSDCHolding: nonUSDC,\n });\n\n const totalUnrealizedROI = account.totalUnrealizedROI({\n totalUnrealizedPnL: unrealizedPnL,\n totalValue: totalValue.toNumber(),\n });\n\n return [totalCollateral, totalValue, totalUnrealizedROI];\n }, [holding, formatedPositions, markPrices]);\n\n const positionsRows = useMemo<API.PositionTPSLExt[] | null>(() => {\n if (!formatedPositions) return null;\n\n if (!symbolInfo || !accountInfo) return formatedPositions[0];\n\n const total = totalCollateral.toNumber();\n\n let rows = formatedPositions[0]\n .filter((item) => item.position_qty !== 0)\n .map((item) => {\n const info = symbolInfo?.[item.symbol];\n\n const related_order = Array.isArray(tpslOrders)\n ? findPositionTPSLFromOrders(tpslOrders, item.symbol)\n : undefined;\n\n const tp_sl_pricer = !!related_order\n ? findTPSLFromOrder(related_order)\n : undefined;\n\n const MMR = positions.MMR({\n baseMMR: info(\"base_mmr\"),\n baseIMR: info(\"base_imr\"),\n IMRFactor: accountInfo.imr_factor[item.symbol] as number,\n positionNotional: item.notional,\n IMR_factor_power: 4 / 5,\n });\n\n return {\n ...item,\n mm: positions.maintenanceMargin({\n positionQty: item.position_qty,\n markPrice: item.mark_price,\n MMR,\n }),\n tp_trigger_price: tp_sl_pricer?.tp_trigger_price,\n sl_trigger_price: tp_sl_pricer?.sl_trigger_price,\n\n mmr: MMR,\n\n // has_position_tp_sl:\n // !tp_sl_pricer?.sl_trigger_price && !tp_sl_pricer?.tp_trigger_price,\n algo_order: related_order,\n };\n });\n\n // calculate est_liq_price\n rows = rows.map((item) => {\n const est_liq_price = positions.liqPrice({\n markPrice: item.mark_price,\n totalCollateral: total,\n positionQty: item.position_qty,\n positions: rows,\n MMR: item.mmr,\n });\n return {\n ...item,\n est_liq_price,\n };\n });\n\n return rows;\n }, [formatedPositions, symbolInfo, accountInfo, totalCollateral, tpslOrders]);\n\n const positionInfoGetter = createGetter<\n Omit<API.PositionInfo, \"rows\">,\n keyof Omit<API.PositionInfo, \"rows\">\n >(data as any, 1);\n\n return [\n {\n rows: positionsRows,\n aggregated: {\n ...(formatedPositions?.[1] ?? {}),\n unrealPnlROI: totalUnrealizedROI,\n },\n totalCollateral,\n totalValue,\n totalUnrealizedROI,\n },\n positionInfoGetter,\n {\n // close: onClosePosition,\n loading: false,\n // showSymbol,\n error,\n // loadMore: () => {},\n refresh: refreshPositions,\n },\n ] as const;\n};\n\nexport const pathOr_unsettledPnLPathOr = pathOr(0, [\n 0,\n \"aggregated\",\n \"unsettledPnL\",\n]);\n"],"names":["useEffect","useMemo","useState","usePrivateQuery","account","positions","createGetter","useFundingRates","AlgoOrderRootType","OrderStatus","useSymbolsInfo","useMarkPricesStream","pathOr","propOr","parseHolding","zero","useMarketsStream","useOrderStream","findPositionTPSLFromOrders","findTPSLFromOrder","usePositionStream","symbol","options","symbolInfo","data","accountInfo","holding","formatter","fundingRates","error","mutate","refreshPositions","onError","err","markPrices","tpslOrders","status","INCOMPLETE","includes","POSITIONAL_TP_SL","TP_SL","priceMode","setPriceMode","calcMode","tickers","tickerPrices","Object","create","forEach","item","formatedPositions","rows","isNil","filteredData","filter","unrealPnL_total","notional_total","unsettlementPnL_total","formatted","map","unRealizedPrice","mark_price","price","info","notional","position_qty","unrealPnl","unrealizedPnL","qty","openPrice","average_open_price","markPrice","imr","IMR","maxLeverage","max_leverage","baseIMR","IMR_Factor","imr_factor","positionNotional","ordersNotional","IMR_factor_power","unrealPnlROI","unrealizedPnLROI","positionQty","unsettlementPnL","costPosition","cost_position","sumUnitaryFunding","lastSumUnitaryFunding","last_sum_unitary_funding","add","mm","unsettlement_pnl","unrealized_pnl","unrealized_pnl_ROI","unrealPnL","toNumber","unsettledPnL","totalCollateral","totalValue","totalUnrealizedROI","unsettlemnedPnL","USDC_holding","nonUSDC","USDCHolding","nonUSDCHolding","totalUnsettlementPnL","totalUnrealizedPnL","positionsRows","total","related_order","Array","isArray","undefined","tp_sl_pricer","MMR","baseMMR","IMRFactor","maintenanceMargin","tp_trigger_price","sl_trigger_price","mmr","algo_order","est_liq_price","liqPrice","positionInfoGetter","aggregated","loading","refresh","pathOr_unsettledPnLPathOr"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}