@orderly.network/hooks 1.2.0 → 1.3.2

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 (371) hide show
  1. package/esm/configProvider.d.ts +7 -1
  2. package/esm/configProvider.d.ts.map +1 -1
  3. package/esm/configProvider.js +44 -18
  4. package/esm/configProvider.js.map +1 -0
  5. package/esm/dataProvider.js +24 -19
  6. package/esm/dataProvider.js.map +1 -0
  7. package/esm/index.d.ts +1 -0
  8. package/esm/index.d.ts.map +1 -1
  9. package/esm/index.js +4 -1
  10. package/esm/index.js.map +1 -0
  11. package/esm/middleware/signatureMiddleware.js +9 -8
  12. package/esm/middleware/signatureMiddleware.js.map +1 -0
  13. package/esm/orderly/orderbook.service.js +39 -28
  14. package/esm/orderly/orderbook.service.js.map +1 -0
  15. package/esm/orderly/orderlyHooks.d.ts +3 -0
  16. package/esm/orderly/orderlyHooks.d.ts.map +1 -1
  17. package/esm/orderly/orderlyHooks.js +2 -0
  18. package/esm/orderly/orderlyHooks.js.map +1 -0
  19. package/esm/orderly/useAccountInfo.js +3 -1
  20. package/esm/orderly/useAccountInfo.js.map +1 -0
  21. package/esm/orderly/useChain.js +16 -9
  22. package/esm/orderly/useChain.js.map +1 -0
  23. package/esm/orderly/useChains.d.ts +11 -12
  24. package/esm/orderly/useChains.d.ts.map +1 -1
  25. package/esm/orderly/useChains.js +68 -46
  26. package/esm/orderly/useChains.js.map +1 -0
  27. package/esm/orderly/useCollateral.d.ts +3 -4
  28. package/esm/orderly/useCollateral.d.ts.map +1 -1
  29. package/esm/orderly/useCollateral.js +53 -20
  30. package/esm/orderly/useCollateral.js.map +1 -0
  31. package/esm/orderly/useDeposit.js +123 -125
  32. package/esm/orderly/useDeposit.js.map +1 -0
  33. package/esm/orderly/useFundingRate.js +14 -13
  34. package/esm/orderly/useFundingRate.js.map +1 -0
  35. package/esm/orderly/useFundingRates.js +6 -4
  36. package/esm/orderly/useFundingRates.js.map +1 -0
  37. package/esm/orderly/useHoldingStream.js +19 -15
  38. package/esm/orderly/useHoldingStream.js.map +1 -0
  39. package/esm/orderly/useIndexPrice.js +7 -5
  40. package/esm/orderly/useIndexPrice.js.map +1 -0
  41. package/esm/orderly/useLeverage.js +9 -12
  42. package/esm/orderly/useLeverage.js.map +1 -0
  43. package/esm/orderly/useMarginRatio.js +27 -13
  44. package/esm/orderly/useMarginRatio.js.map +1 -0
  45. package/esm/orderly/useMarkPrice.js +13 -7
  46. package/esm/orderly/useMarkPrice.js.map +1 -0
  47. package/esm/orderly/useMarkPricesStream.d.ts +1 -1
  48. package/esm/orderly/useMarkPricesStream.d.ts.map +1 -1
  49. package/esm/orderly/useMarkPricesStream.js +9 -8
  50. package/esm/orderly/useMarkPricesStream.js.map +1 -0
  51. package/esm/orderly/useMarketTradeStream.js +33 -18
  52. package/esm/orderly/useMarketTradeStream.js.map +1 -0
  53. package/esm/orderly/useMarkets.js +144 -81
  54. package/esm/orderly/useMarkets.js.map +1 -0
  55. package/esm/orderly/useMarketsStream.js +23 -28
  56. package/esm/orderly/useMarketsStream.js.map +1 -0
  57. package/esm/orderly/useMaxQty.d.ts +6 -0
  58. package/esm/orderly/useMaxQty.d.ts.map +1 -1
  59. package/esm/orderly/useMaxQty.js +26 -18
  60. package/esm/orderly/useMaxQty.js.map +1 -0
  61. package/esm/orderly/useOpenInterest.js +7 -5
  62. package/esm/orderly/useOpenInterest.js.map +1 -0
  63. package/esm/orderly/useOrderEntry.js +182 -160
  64. package/esm/orderly/useOrderEntry.js.map +1 -0
  65. package/esm/orderly/useOrderStream.js +85 -66
  66. package/esm/orderly/useOrderStream.js.map +1 -0
  67. package/esm/orderly/useOrderbookStream.d.ts +2 -3
  68. package/esm/orderly/useOrderbookStream.d.ts.map +1 -1
  69. package/esm/orderly/useOrderbookStream.js +173 -103
  70. package/esm/orderly/useOrderbookStream.js.map +1 -0
  71. package/esm/orderly/usePositionStream.js +82 -62
  72. package/esm/orderly/usePositionStream.js.map +1 -0
  73. package/esm/orderly/usePrivateDataObserver.js +55 -48
  74. package/esm/orderly/usePrivateDataObserver.js.map +1 -0
  75. package/esm/orderly/useSettleSubscription.js +8 -6
  76. package/esm/orderly/useSettleSubscription.js.map +1 -0
  77. package/esm/orderly/useSymbolPriceRange.js +14 -8
  78. package/esm/orderly/useSymbolPriceRange.js.map +1 -0
  79. package/esm/orderly/useSymbolsInfo.js +7 -5
  80. package/esm/orderly/useSymbolsInfo.js.map +1 -0
  81. package/esm/orderly/useTickerStream.d.ts +5 -1
  82. package/esm/orderly/useTickerStream.d.ts.map +1 -1
  83. package/esm/orderly/useTickerStream.js +26 -29
  84. package/esm/orderly/useTickerStream.js.map +1 -0
  85. package/esm/orderly/useWalletSubscription.js +8 -6
  86. package/esm/orderly/useWalletSubscription.js.map +1 -0
  87. package/esm/orderly/useWithdraw.js +19 -11
  88. package/esm/orderly/useWithdraw.js.map +1 -0
  89. package/esm/orderlyContext.d.ts +8 -1
  90. package/esm/orderlyContext.d.ts.map +1 -1
  91. package/esm/orderlyContext.js +2 -1
  92. package/esm/orderlyContext.js.map +1 -0
  93. package/esm/services/dataCenter.js +10 -8
  94. package/esm/services/dataCenter.js.map +1 -0
  95. package/esm/services/painter/backgroundPaint.js +11 -14
  96. package/esm/services/painter/backgroundPaint.js.map +1 -0
  97. package/esm/services/painter/basePaint.js +5 -1
  98. package/esm/services/painter/basePaint.js.map +1 -0
  99. package/esm/services/painter/dataPaint.js +53 -50
  100. package/esm/services/painter/dataPaint.js.map +1 -0
  101. package/esm/services/painter/layout.config.js +15 -13
  102. package/esm/services/painter/layout.config.js.map +1 -0
  103. package/esm/services/painter/painter.js +14 -13
  104. package/esm/services/painter/painter.js.map +1 -0
  105. package/esm/services/painter/resource.js +6 -4
  106. package/esm/services/painter/resource.js.map +1 -0
  107. package/esm/statusProvider.js +10 -3
  108. package/esm/statusProvider.js.map +1 -0
  109. package/esm/unuse/apiPrefixMiddleware.js +18 -16
  110. package/esm/unuse/apiPrefixMiddleware.js.map +1 -0
  111. package/esm/unuse/fn.js +3 -1
  112. package/esm/unuse/fn.js.map +1 -0
  113. package/esm/unuse/useBalance.js +6 -4
  114. package/esm/unuse/useBalance.js.map +1 -0
  115. package/esm/unuse/useFetures.js +26 -18
  116. package/esm/unuse/useFetures.js.map +1 -0
  117. package/esm/unuse/useRunOnce.js +10 -7
  118. package/esm/unuse/useRunOnce.js.map +1 -0
  119. package/esm/unuse/useSyncEnd.js +5 -4
  120. package/esm/unuse/useSyncEnd.js.map +1 -0
  121. package/esm/unuse/useTokenInfo.js +7 -5
  122. package/esm/unuse/useTokenInfo.js.map +1 -0
  123. package/esm/unuse/useUnsettlementPnL.js +7 -3
  124. package/esm/unuse/useUnsettlementPnL.js.map +1 -0
  125. package/esm/useAccount.js +18 -21
  126. package/esm/useAccount.js.map +1 -0
  127. package/esm/useAccountInstance.js +6 -7
  128. package/esm/useAccountInstance.js.map +1 -0
  129. package/esm/useBoolean.js +14 -5
  130. package/esm/useBoolean.js.map +1 -0
  131. package/esm/useConfig.js +3 -1
  132. package/esm/useConfig.js.map +1 -0
  133. package/esm/useEventEmitter.js +4 -2
  134. package/esm/useEventEmitter.js.map +1 -0
  135. package/esm/useLazyQuery.js +6 -7
  136. package/esm/useLazyQuery.js.map +1 -0
  137. package/esm/useLocalStorage.js +30 -20
  138. package/esm/useLocalStorage.js.map +1 -0
  139. package/esm/useMediaQuery.js +11 -9
  140. package/esm/useMediaQuery.js.map +1 -0
  141. package/esm/useMutation.js +26 -37
  142. package/esm/useMutation.js.map +1 -0
  143. package/esm/useObserve.js +4 -4
  144. package/esm/useObserve.js.map +1 -0
  145. package/esm/useParamsCheck.js +8 -10
  146. package/esm/useParamsCheck.js.map +1 -0
  147. package/esm/usePoster.js +56 -45
  148. package/esm/usePoster.js.map +1 -0
  149. package/esm/usePreloadData.js +9 -5
  150. package/esm/usePreloadData.js.map +1 -0
  151. package/esm/usePrivateInfiniteQuery.js +15 -9
  152. package/esm/usePrivateInfiniteQuery.js.map +1 -0
  153. package/esm/usePrivateQuery.js +15 -8
  154. package/esm/usePrivateQuery.js.map +1 -0
  155. package/esm/useQuery.js +6 -5
  156. package/esm/useQuery.js.map +1 -0
  157. package/esm/useSessionStorage.js +28 -19
  158. package/esm/useSessionStorage.js.map +1 -0
  159. package/esm/useWS.js +15 -13
  160. package/esm/useWS.js.map +1 -0
  161. package/esm/useWsStatus.js +12 -12
  162. package/esm/useWsStatus.js.map +1 -0
  163. package/esm/utils/createGetter.js +8 -8
  164. package/esm/utils/createGetter.js.map +1 -0
  165. package/esm/utils/createOrder.d.ts +1 -0
  166. package/esm/utils/createOrder.d.ts.map +1 -1
  167. package/esm/utils/createOrder.js +59 -43
  168. package/esm/utils/createOrder.js.map +1 -0
  169. package/esm/utils/dev.js +6 -4
  170. package/esm/utils/dev.js.map +1 -0
  171. package/esm/utils/fetcher.js +3 -1
  172. package/esm/utils/fetcher.js.map +1 -0
  173. package/esm/utils/json.js +3 -2
  174. package/esm/utils/json.js.map +1 -0
  175. package/esm/utils/orderEntryHelper.js +92 -63
  176. package/esm/utils/orderEntryHelper.js.map +1 -0
  177. package/esm/utils/parseHolding.js +10 -6
  178. package/esm/utils/parseHolding.js.map +1 -0
  179. package/esm/utils/swr.js +114 -104
  180. package/esm/utils/swr.js.map +1 -0
  181. package/esm/version.d.ts +1 -1
  182. package/esm/version.js +4 -3
  183. package/esm/version.js.map +1 -0
  184. package/esm/walletConnectorContext.js +4 -2
  185. package/esm/walletConnectorContext.js.map +1 -0
  186. package/lib/configProvider.d.ts +7 -1
  187. package/lib/configProvider.d.ts.map +1 -1
  188. package/lib/configProvider.js +108 -56
  189. package/lib/configProvider.js.map +1 -0
  190. package/lib/dataProvider.js +50 -29
  191. package/lib/dataProvider.js.map +1 -0
  192. package/lib/index.d.ts +1 -0
  193. package/lib/index.d.ts.map +1 -1
  194. package/lib/index.js +191 -88
  195. package/lib/index.js.map +1 -0
  196. package/lib/middleware/signatureMiddleware.js +22 -15
  197. package/lib/middleware/signatureMiddleware.js.map +1 -0
  198. package/lib/orderly/orderbook.service.js +59 -33
  199. package/lib/orderly/orderbook.service.js.map +1 -0
  200. package/lib/orderly/orderlyHooks.d.ts +3 -0
  201. package/lib/orderly/orderlyHooks.d.ts.map +1 -1
  202. package/lib/orderly/orderlyHooks.js +124 -57
  203. package/lib/orderly/orderlyHooks.js.map +1 -0
  204. package/lib/orderly/useAccountInfo.js +14 -6
  205. package/lib/orderly/useAccountInfo.js.map +1 -0
  206. package/lib/orderly/useChain.js +30 -17
  207. package/lib/orderly/useChain.js.map +1 -0
  208. package/lib/orderly/useChains.d.ts +11 -12
  209. package/lib/orderly/useChains.d.ts.map +1 -1
  210. package/lib/orderly/useChains.js +100 -59
  211. package/lib/orderly/useChains.js.map +1 -0
  212. package/lib/orderly/useCollateral.d.ts +3 -4
  213. package/lib/orderly/useCollateral.d.ts.map +1 -1
  214. package/lib/orderly/useCollateral.js +81 -42
  215. package/lib/orderly/useCollateral.js.map +1 -0
  216. package/lib/orderly/useDeposit.js +154 -150
  217. package/lib/orderly/useDeposit.js.map +1 -0
  218. package/lib/orderly/useFundingRate.js +29 -22
  219. package/lib/orderly/useFundingRate.js.map +1 -0
  220. package/lib/orderly/useFundingRates.js +19 -11
  221. package/lib/orderly/useFundingRates.js.map +1 -0
  222. package/lib/orderly/useHoldingStream.js +39 -27
  223. package/lib/orderly/useHoldingStream.js.map +1 -0
  224. package/lib/orderly/useIndexPrice.js +24 -14
  225. package/lib/orderly/useIndexPrice.js.map +1 -0
  226. package/lib/orderly/useLeverage.js +27 -24
  227. package/lib/orderly/useLeverage.js.map +1 -0
  228. package/lib/orderly/useMarginRatio.js +49 -29
  229. package/lib/orderly/useMarginRatio.js.map +1 -0
  230. package/lib/orderly/useMarkPrice.js +26 -15
  231. package/lib/orderly/useMarkPrice.js.map +1 -0
  232. package/lib/orderly/useMarkPricesStream.d.ts +1 -1
  233. package/lib/orderly/useMarkPricesStream.d.ts.map +1 -1
  234. package/lib/orderly/useMarkPricesStream.js +26 -17
  235. package/lib/orderly/useMarkPricesStream.js.map +1 -0
  236. package/lib/orderly/useMarketTradeStream.js +47 -26
  237. package/lib/orderly/useMarketTradeStream.js.map +1 -0
  238. package/lib/orderly/useMarkets.js +172 -95
  239. package/lib/orderly/useMarkets.js.map +1 -0
  240. package/lib/orderly/useMarketsStream.js +44 -41
  241. package/lib/orderly/useMarketsStream.js.map +1 -0
  242. package/lib/orderly/useMaxQty.d.ts +6 -0
  243. package/lib/orderly/useMaxQty.d.ts.map +1 -1
  244. package/lib/orderly/useMaxQty.js +52 -43
  245. package/lib/orderly/useMaxQty.js.map +1 -0
  246. package/lib/orderly/useOpenInterest.js +24 -14
  247. package/lib/orderly/useOpenInterest.js.map +1 -0
  248. package/lib/orderly/useOrderEntry.js +238 -210
  249. package/lib/orderly/useOrderEntry.js.map +1 -0
  250. package/lib/orderly/useOrderStream.js +111 -84
  251. package/lib/orderly/useOrderStream.js.map +1 -0
  252. package/lib/orderly/useOrderbookStream.d.ts +2 -3
  253. package/lib/orderly/useOrderbookStream.d.ts.map +1 -1
  254. package/lib/orderly/useOrderbookStream.js +227 -148
  255. package/lib/orderly/useOrderbookStream.js.map +1 -0
  256. package/lib/orderly/usePositionStream.js +134 -100
  257. package/lib/orderly/usePositionStream.js.map +1 -0
  258. package/lib/orderly/usePrivateDataObserver.js +76 -63
  259. package/lib/orderly/usePrivateDataObserver.js.map +1 -0
  260. package/lib/orderly/useSettleSubscription.js +25 -15
  261. package/lib/orderly/useSettleSubscription.js.map +1 -0
  262. package/lib/orderly/useSymbolPriceRange.js +29 -23
  263. package/lib/orderly/useSymbolPriceRange.js.map +1 -0
  264. package/lib/orderly/useSymbolsInfo.js +23 -15
  265. package/lib/orderly/useSymbolsInfo.js.map +1 -0
  266. package/lib/orderly/useTickerStream.d.ts +5 -1
  267. package/lib/orderly/useTickerStream.d.ts.map +1 -1
  268. package/lib/orderly/useTickerStream.js +51 -48
  269. package/lib/orderly/useTickerStream.js.map +1 -0
  270. package/lib/orderly/useWalletSubscription.js +25 -15
  271. package/lib/orderly/useWalletSubscription.js.map +1 -0
  272. package/lib/orderly/useWithdraw.js +36 -22
  273. package/lib/orderly/useWithdraw.js.map +1 -0
  274. package/lib/orderlyContext.d.ts +8 -1
  275. package/lib/orderlyContext.d.ts.map +1 -1
  276. package/lib/orderlyContext.js +22 -6
  277. package/lib/orderlyContext.js.map +1 -0
  278. package/lib/services/dataCenter.js +15 -11
  279. package/lib/services/dataCenter.js.map +1 -0
  280. package/lib/services/painter/backgroundPaint.js +21 -18
  281. package/lib/services/painter/backgroundPaint.js.map +1 -0
  282. package/lib/services/painter/basePaint.js +14 -4
  283. package/lib/services/painter/basePaint.js.map +1 -0
  284. package/lib/services/painter/dataPaint.js +67 -58
  285. package/lib/services/painter/dataPaint.js.map +1 -0
  286. package/lib/services/painter/layout.config.js +25 -16
  287. package/lib/services/painter/layout.config.js.map +1 -0
  288. package/lib/services/painter/painter.js +27 -20
  289. package/lib/services/painter/painter.js.map +1 -0
  290. package/lib/services/painter/resource.js +15 -7
  291. package/lib/services/painter/resource.js.map +1 -0
  292. package/lib/statusProvider.js +31 -10
  293. package/lib/statusProvider.js.map +1 -0
  294. package/lib/unuse/apiPrefixMiddleware.js +30 -22
  295. package/lib/unuse/apiPrefixMiddleware.js.map +1 -0
  296. package/lib/unuse/fn.js +14 -5
  297. package/lib/unuse/fn.js.map +1 -0
  298. package/lib/unuse/useBalance.js +23 -13
  299. package/lib/unuse/useBalance.js.map +1 -0
  300. package/lib/unuse/useFetures.js +41 -28
  301. package/lib/unuse/useFetures.js.map +1 -0
  302. package/lib/unuse/useRunOnce.js +61 -11
  303. package/lib/unuse/useRunOnce.js.map +1 -0
  304. package/lib/unuse/useSyncEnd.js +17 -10
  305. package/lib/unuse/useSyncEnd.js.map +1 -0
  306. package/lib/unuse/useTokenInfo.js +20 -12
  307. package/lib/unuse/useTokenInfo.js.map +1 -0
  308. package/lib/unuse/useUnsettlementPnL.js +21 -11
  309. package/lib/unuse/useUnsettlementPnL.js.map +1 -0
  310. package/lib/useAccount.js +32 -29
  311. package/lib/useAccount.js.map +1 -0
  312. package/lib/useAccountInstance.js +27 -20
  313. package/lib/useAccountInstance.js.map +1 -0
  314. package/lib/useBoolean.js +25 -10
  315. package/lib/useBoolean.js.map +1 -0
  316. package/lib/useConfig.js +15 -7
  317. package/lib/useConfig.js.map +1 -0
  318. package/lib/useEventEmitter.js +23 -13
  319. package/lib/useEventEmitter.js.map +1 -0
  320. package/lib/useLazyQuery.js +25 -23
  321. package/lib/useLazyQuery.js.map +1 -0
  322. package/lib/useLocalStorage.js +44 -28
  323. package/lib/useLocalStorage.js.map +1 -0
  324. package/lib/useMediaQuery.js +22 -14
  325. package/lib/useMediaQuery.js.map +1 -0
  326. package/lib/useMutation.js +47 -52
  327. package/lib/useMutation.js.map +1 -0
  328. package/lib/useObserve.js +22 -8
  329. package/lib/useObserve.js.map +1 -0
  330. package/lib/useParamsCheck.js +18 -14
  331. package/lib/useParamsCheck.js.map +1 -0
  332. package/lib/usePoster.js +80 -74
  333. package/lib/usePoster.js.map +1 -0
  334. package/lib/usePreloadData.js +21 -11
  335. package/lib/usePreloadData.js.map +1 -0
  336. package/lib/usePrivateInfiniteQuery.js +36 -22
  337. package/lib/usePrivateInfiniteQuery.js.map +1 -0
  338. package/lib/usePrivateQuery.js +35 -25
  339. package/lib/usePrivateQuery.js.map +1 -0
  340. package/lib/useQuery.js +24 -20
  341. package/lib/useQuery.js.map +1 -0
  342. package/lib/useSessionStorage.js +41 -26
  343. package/lib/useSessionStorage.js.map +1 -0
  344. package/lib/useWS.js +42 -32
  345. package/lib/useWS.js.map +1 -0
  346. package/lib/useWsStatus.js +34 -20
  347. package/lib/useWsStatus.js.map +1 -0
  348. package/lib/utils/createGetter.js +19 -14
  349. package/lib/utils/createGetter.js.map +1 -0
  350. package/lib/utils/createOrder.d.ts +1 -0
  351. package/lib/utils/createOrder.d.ts.map +1 -1
  352. package/lib/utils/createOrder.js +133 -82
  353. package/lib/utils/createOrder.js.map +1 -0
  354. package/lib/utils/dev.js +13 -9
  355. package/lib/utils/dev.js.map +1 -0
  356. package/lib/utils/fetcher.js +13 -5
  357. package/lib/utils/fetcher.js.map +1 -0
  358. package/lib/utils/json.js +12 -5
  359. package/lib/utils/json.js.map +1 -0
  360. package/lib/utils/orderEntryHelper.js +125 -82
  361. package/lib/utils/orderEntryHelper.js.map +1 -0
  362. package/lib/utils/parseHolding.js +19 -9
  363. package/lib/utils/parseHolding.js.map +1 -0
  364. package/lib/utils/swr.js +134 -111
  365. package/lib/utils/swr.js.map +1 -0
  366. package/lib/version.d.ts +1 -1
  367. package/lib/version.js +13 -4
  368. package/lib/version.js.map +1 -0
  369. package/lib/walletConnectorContext.js +23 -7
  370. package/lib/walletConnectorContext.js.map +1 -0
  371. package/package.json +17 -9
@@ -1,91 +1,115 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.useOrderbookStream = exports.mergeOrderbook = exports.reduceOrderbook = void 0;
7
- const react_1 = require("react");
8
- const useTickerStream_1 = require("./useTickerStream");
9
- const useMarkPrice_1 = require("./useMarkPrice");
10
- const useWS_1 = require("../useWS");
11
- const useEventEmitter_1 = require("../useEventEmitter");
12
- const useSymbolsInfo_1 = require("./useSymbolsInfo");
13
- const utils_1 = require("@orderly.network/utils");
14
- const ramda_1 = require("ramda");
15
- const types_1 = require("@orderly.network/types");
16
- const orderbook_service_1 = __importDefault(require("./orderbook.service"));
17
- const paddingFn = (len) => Array(len).fill([Number.NaN, Number.NaN, Number.NaN, Number.NaN]);
18
- const asksSortFn = (a, b) => a[0] - b[0];
19
- const bidsSortFn = (a, b) => b[0] - a[0];
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ mergeOrderbook: function() {
13
+ return mergeOrderbook;
14
+ },
15
+ reduceOrderbook: function() {
16
+ return reduceOrderbook;
17
+ },
18
+ useOrderbookStream: function() {
19
+ return useOrderbookStream;
20
+ }
21
+ });
22
+ const _react = require("react");
23
+ const _useTickerStream = require("./useTickerStream");
24
+ const _useMarkPrice = require("./useMarkPrice");
25
+ const _useWS = require("../useWS");
26
+ const _useEventEmitter = require("../useEventEmitter");
27
+ const _useSymbolsInfo = require("./useSymbolsInfo");
28
+ const _utils = require("@orderly.network/utils");
29
+ const _ramda = require("ramda");
30
+ const _types = require("@orderly.network/types");
31
+ const _orderbookservice = /*#__PURE__*/ _interop_require_default(require("./orderbook.service"));
32
+ function _interop_require_default(obj) {
33
+ return obj && obj.__esModule ? obj : {
34
+ default: obj
35
+ };
36
+ }
37
+ const paddingFn = (len)=>Array(len).fill([
38
+ Number.NaN,
39
+ Number.NaN,
40
+ Number.NaN,
41
+ Number.NaN
42
+ ]);
43
+ const asksSortFn = (a, b)=>a[0] - b[0];
44
+ const bidsSortFn = (a, b)=>b[0] - a[0];
20
45
  // const commonSortFn = (a: OrderBookItem, b: OrderBookItem) => b[0] - a[0];
21
- const reduceItems = (depth, level, data, asks = false) => {
46
+ const reduceItems = (depth, level, data, asks = false)=>{
22
47
  if (!Array.isArray(data) || data.length === 0) {
23
48
  return [];
24
49
  }
25
- let newData = [...data];
50
+ let newData = [
51
+ ...data
52
+ ];
26
53
  const result = [];
27
54
  //
28
55
  if (typeof depth !== "undefined") {
29
56
  const prices = new Map();
30
- for (let i = 0; i < data.length; i++) {
57
+ for(let i = 0; i < data.length; i++){
31
58
  const [price, quantity] = data[i];
32
- if (isNaN(price) || isNaN(quantity))
33
- continue;
59
+ if (isNaN(price) || isNaN(quantity)) continue;
34
60
  let priceKey;
35
61
  if (asks) {
36
- priceKey = new utils_1.Decimal(Math.ceil(price / depth)).mul(depth).toNumber();
37
- }
38
- else {
39
- priceKey = new utils_1.Decimal(Math.floor(price / depth)).mul(depth).toNumber();
62
+ priceKey = new _utils.Decimal(Math.ceil(price / depth)).mul(depth).toNumber();
63
+ } else {
64
+ priceKey = new _utils.Decimal(Math.floor(price / depth)).mul(depth).toNumber();
40
65
  }
41
66
  if (depth < 1 && depth > 0 && priceKey.toString().indexOf(".") !== -1) {
42
67
  const priceStr = price.toString();
43
68
  const index = priceStr.indexOf(".");
44
69
  const decimal = priceStr.slice(index + 1);
45
- const decimalDepth = depth.toString().slice(2).length;
46
- const decimalStr = decimal.slice(0, (0, ramda_1.min)(decimal.length, decimalDepth));
47
- priceKey = new utils_1.Decimal(priceStr.slice(0, index) + "." + decimalStr).toNumber();
70
+ const decimalDepth = (0, _utils.removeTrailingZeros)(depth).toString().slice(2).length;
71
+ const decimalStr = decimal.slice(0, (0, _ramda.min)(decimal.length, decimalDepth));
72
+ priceKey = new _utils.Decimal(priceStr.slice(0, index) + "." + decimalStr).toNumber();
48
73
  }
49
74
  // console.log(`reduce items price: ${price}, priceKey: ${priceKey}, depth: ${depth}, resetPriceKey: ${price.toString === priceKey.toString}`);
50
75
  // console.log(`ask: ${asks} reduce items price: ${priceKey}`);
51
76
  if (prices.has(priceKey)) {
52
77
  const item = prices.get(priceKey);
53
- const itemPrice = new utils_1.Decimal(item[1]).add(quantity).toNumber();
78
+ const itemPrice = new _utils.Decimal(item[1]).add(quantity).toNumber();
54
79
  // prices.push([price, quantity]);
55
- prices.set(priceKey, [priceKey, itemPrice]);
56
- }
57
- else {
58
- prices.set(priceKey, [priceKey, quantity]);
80
+ prices.set(priceKey, [
81
+ priceKey,
82
+ itemPrice
83
+ ]);
84
+ } else {
85
+ prices.set(priceKey, [
86
+ priceKey,
87
+ quantity
88
+ ]);
59
89
  }
60
90
  }
61
91
  newData = Array.from(prices.values());
62
92
  }
63
- for (let i = 0; i < newData.length; i++) {
93
+ for(let i = 0; i < newData.length; i++){
64
94
  const [price, quantity] = newData[i];
65
- if (isNaN(price) || isNaN(quantity))
66
- continue;
67
- const newQuantity = new utils_1.Decimal(quantity)
68
- .add(result.length > 0 ? result[result.length - 1][2] : 0)
69
- .toNumber();
70
- const newAmount = new utils_1.Decimal(quantity * price)
71
- .add(result.length > 0 ? result[result.length - 1][3] : 0)
72
- .toNumber();
73
- result.push([price, quantity, newQuantity, newAmount]);
74
- // if the total is greater than the level, break
75
- // TODO:
76
- // if (i + 1 >= level) {
77
- // break;
78
- // }
95
+ if (isNaN(price) || isNaN(quantity)) continue;
96
+ const newQuantity = new _utils.Decimal(quantity).add(result.length > 0 ? result[result.length - 1][2] : 0).toNumber();
97
+ const newAmount = new _utils.Decimal(quantity * price).add(result.length > 0 ? result[result.length - 1][3] : 0).toNumber();
98
+ result.push([
99
+ price,
100
+ quantity,
101
+ newQuantity,
102
+ newAmount
103
+ ]);
104
+ // if the total is greater than the level, break
105
+ // TODO:
106
+ // if (i + 1 >= level) {
107
+ // break;
108
+ // }
79
109
  }
80
110
  return result;
81
111
  };
82
- /**
83
- * @name reduceOrderbook
84
- * @param depth
85
- * @param level
86
- * @param data
87
- */
88
- const reduceOrderbook = (depth, level, padding, data) => {
112
+ const reduceOrderbook = (depth, level, padding, data)=>{
89
113
  let asks = reduceItems(depth, level, data.asks, true);
90
114
  let bids = reduceItems(depth, level, data.bids);
91
115
  /// not empty and asks.price <= bids.price
@@ -93,17 +117,21 @@ const reduceOrderbook = (depth, level, padding, data) => {
93
117
  if (asks.length === 1) {
94
118
  const [price, qty, newQuantity, newAmount] = asks[0];
95
119
  asks.shift();
96
- asks.push([price + (depth === undefined ? 0 : depth), qty, newQuantity, newAmount]);
97
- }
98
- else {
120
+ asks.push([
121
+ price + (depth === undefined ? 0 : depth),
122
+ qty,
123
+ newQuantity,
124
+ newAmount
125
+ ]);
126
+ } else {
99
127
  const [bidPrice] = bids[0];
100
- while (asks.length > 0) {
128
+ while(asks.length > 0){
101
129
  const [askPrice, askQty, newQuantity, newAmount] = asks[0];
102
130
  if (askPrice <= bidPrice) {
103
131
  // console.log("xxxxxxxxxxx reset ask list begin", [...asks], { ...asks[0] });
104
132
  asks.shift();
105
133
  let logStr = "";
106
- for (let index = 0; index < asks.length; index++) {
134
+ for(let index = 0; index < asks.length; index++){
107
135
  if (index === 0) {
108
136
  const quantity = asks[index][1] + askQty;
109
137
  asks[index][1] = quantity;
@@ -111,17 +139,15 @@ const reduceOrderbook = (depth, level, padding, data) => {
111
139
  // asks[index][3] += newAmount;
112
140
  // FIXME: fix this code later
113
141
  asks[index][3] = Math.ceil(quantity) * asks[index][0];
114
- }
115
- else {
142
+ } else {
116
143
  // asks[index][3] += newAmount;
117
144
  // FIXME: fix this code later
118
145
  asks[index][3] = asks[index][0] * asks[index][1] + asks[index - 1][3];
119
146
  }
120
147
  logStr += `index: ${index} ${asks[index]}\n`;
121
148
  }
122
- // console.log("xxxxxxxxxxx reset ask list end", logStr);
123
- }
124
- else {
149
+ // console.log("xxxxxxxxxxx reset ask list end", logStr);
150
+ } else {
125
151
  break;
126
152
  }
127
153
  }
@@ -129,39 +155,32 @@ const reduceOrderbook = (depth, level, padding, data) => {
129
155
  }
130
156
  asks = asks.reverse();
131
157
  if (padding) {
132
- asks =
133
- asks.length < level ? paddingFn(level - asks.length).concat(asks) : asks;
134
- bids =
135
- bids.length < level ? bids.concat(paddingFn(level - bids.length)) : bids;
158
+ asks = asks.length < level ? paddingFn(level - asks.length).concat(asks) : asks;
159
+ bids = bids.length < level ? bids.concat(paddingFn(level - bids.length)) : bids;
136
160
  }
137
161
  return {
138
162
  asks: asks,
139
- bids: bids,
163
+ bids: bids
140
164
  };
141
165
  };
142
- exports.reduceOrderbook = reduceOrderbook;
143
- const mergeItems = (data, update) => {
166
+ const mergeItems = (data, update)=>{
144
167
  // let index = -1;
145
- if (data.length === 0)
146
- return update;
147
- data = data.filter(([price]) => !isNaN(price));
148
- while (update.length > 0) {
168
+ if (data.length === 0) return update;
169
+ data = data.filter(([price])=>!isNaN(price));
170
+ while(update.length > 0){
149
171
  const item = update.shift();
150
172
  //
151
173
  if (item) {
152
174
  const [price, quantity] = item;
153
- const index = data.findIndex(([p], index) => p === price);
175
+ const index = data.findIndex(([p], index)=>p === price);
154
176
  //
155
177
  if (index === -1) {
156
- if (quantity === 0)
157
- continue;
178
+ if (quantity === 0) continue;
158
179
  data.push(item);
159
- }
160
- else {
180
+ } else {
161
181
  if (quantity === 0) {
162
182
  data.splice(index, 1);
163
- }
164
- else {
183
+ } else {
165
184
  data[index] = item;
166
185
  }
167
186
  }
@@ -169,63 +188,89 @@ const mergeItems = (data, update) => {
169
188
  }
170
189
  return data;
171
190
  };
172
- const mergeOrderbook = (data, update) => {
173
- let asks = [...data.asks];
174
- let bids = [...data.bids];
191
+ const mergeOrderbook = (data, update)=>{
192
+ let asks = [
193
+ ...data.asks
194
+ ];
195
+ let bids = [
196
+ ...data.bids
197
+ ];
175
198
  asks = mergeItems(asks, update.asks).sort(asksSortFn);
176
199
  bids = mergeItems(bids, update.bids).sort(bidsSortFn);
177
200
  return {
178
201
  asks: asks,
179
- bids: bids,
202
+ bids: bids
180
203
  };
181
204
  };
182
- exports.mergeOrderbook = mergeOrderbook;
183
- const INIT_DATA = { asks: [], bids: [] };
184
- /**
185
- * @name useOrderbookStream
186
- * @description React hook that returns the current orderbook for a given market
187
- */
188
- const useOrderbookStream = (symbol, initial = INIT_DATA, options) => {
205
+ const INIT_DATA = {
206
+ asks: [],
207
+ bids: []
208
+ };
209
+ const useOrderbookStream = (symbol, initial = INIT_DATA, options)=>{
189
210
  if (!symbol) {
190
- throw new types_1.SDKError("useOrderbookStream requires a symbol");
211
+ throw new _types.SDKError("useOrderbookStream requires a symbol");
191
212
  }
192
213
  const level = options?.level ?? 10;
193
214
  const padding = options?.padding ?? true;
194
- const [requestData, setRequestData] = (0, react_1.useState)(null);
195
- const [data, setData] = (0, react_1.useState)(initial);
196
- const [isLoading, setIsLoading] = (0, react_1.useState)(true);
215
+ const [requestData, setRequestData] = (0, _react.useState)(null);
216
+ const [data, setData] = (0, _react.useState)(initial);
217
+ const [isLoading, setIsLoading] = (0, _react.useState)(true);
197
218
  // const [level, setLevel] = useState(() => options?.level ?? 10);
198
- const config = (0, useSymbolsInfo_1.useSymbolsInfo)()[symbol];
199
- const [depth, setDepth] = (0, react_1.useState)();
219
+ const config = (0, _useSymbolsInfo.useSymbolsInfo)()[symbol];
220
+ const [depth, setDepth] = (0, _react.useState)();
200
221
  // markPrice, lastPrice
201
- const prevMiddlePrice = (0, react_1.useRef)(0);
202
- const depths = (0, react_1.useMemo)(() => {
222
+ const prevMiddlePrice = (0, _react.useRef)(0);
223
+ const depths = (0, _react.useMemo)(()=>{
203
224
  const tick = config("quote_tick");
204
- return [tick, tick * 10, tick * 100, tick * 1000];
205
- }, [config("quote_tick")]);
206
- (0, react_1.useEffect)(() => {
225
+ if (typeof tick === 'undefined') return [];
226
+ try {
227
+ const base = new _utils.Decimal(tick);
228
+ return [
229
+ base.toNumber(),
230
+ base.mul(10).toNumber(),
231
+ base.mul(100).toNumber(),
232
+ base.mul(1000).toNumber()
233
+ ];
234
+ } catch (e) {}
235
+ return [
236
+ tick
237
+ ];
238
+ }, [
239
+ config("quote_tick")
240
+ ]);
241
+ (0, _react.useEffect)(()=>{
207
242
  setDepth(config("quote_tick"));
208
- }, [config("quote_tick")]);
209
- const ws = (0, useWS_1.useWS)();
210
- const ticker = (0, useTickerStream_1.useTickerStream)(symbol);
211
- const eventEmitter = (0, useEventEmitter_1.useEventEmitter)();
243
+ }, [
244
+ config("quote_tick")
245
+ ]);
246
+ const ws = (0, _useWS.useWS)();
247
+ const ticker = (0, _useTickerStream.useTickerStream)(symbol);
248
+ const eventEmitter = (0, _useEventEmitter.useEventEmitter)();
212
249
  // const orderbookRequest =
213
- (0, react_1.useEffect)(() => {
250
+ (0, _react.useEffect)(()=>{
214
251
  let needRequestFullOrderbook = true;
215
252
  setIsLoading(true);
216
253
  let orderBookUpdateSub;
217
254
  let fullOrderBookUpdateSub;
218
255
  orderBookUpdateSub = ws.subscribe({
219
256
  event: "subscribe",
220
- topic: `${symbol}@orderbookupdate`,
257
+ topic: `${symbol}@orderbookupdate`
221
258
  }, {
222
- formatter: (message) => message,
223
- onMessage: (message) => {
259
+ formatter: (message)=>message,
260
+ onMessage: (message)=>{
224
261
  const { data: wsData, ts } = message;
225
262
  const { asks, bids, prevTs } = wsData;
226
- orderbook_service_1.default.updateOrderbook(symbol, { asks, bids, ts, prevTs }, () => needRequestFullOrderbook = true);
227
- const data = orderbook_service_1.default.getRawOrderbook(symbol);
228
- setData({ bids: data.bids, asks: data.asks });
263
+ _orderbookservice.default.updateOrderbook(symbol, {
264
+ asks,
265
+ bids,
266
+ ts,
267
+ prevTs
268
+ }, ()=>needRequestFullOrderbook = true);
269
+ const data = _orderbookservice.default.getRawOrderbook(symbol);
270
+ setData({
271
+ bids: data.bids,
272
+ asks: data.asks
273
+ });
229
274
  }
230
275
  });
231
276
  if (needRequestFullOrderbook) {
@@ -235,50 +280,66 @@ const useOrderbookStream = (symbol, initial = INIT_DATA, options) => {
235
280
  id: `${symbol}@orderbook`,
236
281
  params: {
237
282
  type: "orderbook",
238
- symbol: symbol,
239
- },
283
+ symbol: symbol
284
+ }
240
285
  }, {
241
- formatter: (message) => message,
242
- onMessage: (message) => {
286
+ formatter: (message)=>message,
287
+ onMessage: (message)=>{
243
288
  const { symbol, asks, bids, ts } = message.data;
244
- orderbook_service_1.default.setFullOrderbook(symbol, { asks, bids, ts });
245
- const data = orderbook_service_1.default.getRawOrderbook(symbol);
246
- setData({ bids: data.bids, asks: data.asks });
289
+ _orderbookservice.default.setFullOrderbook(symbol, {
290
+ asks,
291
+ bids,
292
+ ts
293
+ });
294
+ const data = _orderbookservice.default.getRawOrderbook(symbol);
295
+ setData({
296
+ bids: data.bids,
297
+ asks: data.asks
298
+ });
247
299
  setIsLoading(false);
248
- },
300
+ }
249
301
  });
250
302
  needRequestFullOrderbook = false;
251
303
  }
252
- return () => {
304
+ return ()=>{
253
305
  // unsubscribe
254
306
  orderBookUpdateSub?.();
255
307
  fullOrderBookUpdateSub?.();
256
- orderbook_service_1.default.resetOrderBook(symbol);
308
+ _orderbookservice.default.resetOrderBook(symbol);
257
309
  setData(INIT_DATA);
258
310
  };
259
- }, [symbol]);
311
+ }, [
312
+ symbol
313
+ ]);
260
314
  // const {data:markPrices} = useMarkPricesStream();
261
- const { data: markPrice } = (0, useMarkPrice_1.useMarkPrice)(symbol);
262
- const onItemClick = (0, react_1.useCallback)((item) => {
315
+ const { data: markPrice } = (0, _useMarkPrice.useMarkPrice)(symbol);
316
+ const onItemClick = (0, _react.useCallback)((item)=>{
263
317
  eventEmitter.emit("orderbook:item:click", item);
264
318
  }, []);
265
- const onDepthChange = (0, react_1.useCallback)((depth) => {
319
+ const onDepthChange = (0, _react.useCallback)((depth)=>{
266
320
  //
267
- setDepth(() => depth);
321
+ setDepth(()=>depth);
268
322
  }, []);
269
- const reducedData = (0, exports.reduceOrderbook)(depth, level, padding, {
270
- asks: [...data.asks],
271
- bids: [...data.bids],
323
+ const reducedData = reduceOrderbook(depth, level, padding, {
324
+ asks: [
325
+ ...data.asks
326
+ ],
327
+ bids: [
328
+ ...data.bids
329
+ ]
272
330
  });
273
331
  // emit the asks0 and bids0
274
- (0, react_1.useEffect)(() => {
332
+ (0, _react.useEffect)(()=>{
275
333
  const updateData = [
276
334
  reducedData.asks?.[reducedData.asks.length - 1]?.[0],
277
335
  reducedData.bids?.[0]?.[0]
278
336
  ];
279
337
  eventEmitter.emit("orderbook:update", updateData);
280
- }, [reducedData.asks?.[reducedData.asks.length - 1]?.[0], reducedData.bids?.[0]?.[0]]);
281
- const middlePrice = (0, react_1.useMemo)(() => {
338
+ }, [
339
+ reducedData.asks?.[reducedData.asks.length - 1]?.[0],
340
+ reducedData.bids?.[0]?.[0]
341
+ ]);
342
+ const middlePrice = (0, _react.useMemo)(()=>{
282
343
  let asksFrist = 0, bidsFirst = 0;
283
344
  if (data.asks.length > 0) {
284
345
  asksFrist = reducedData.asks?.[reducedData.asks.length - 1]?.[0];
@@ -286,21 +347,39 @@ const useOrderbookStream = (symbol, initial = INIT_DATA, options) => {
286
347
  if (data.bids.length > 0) {
287
348
  bidsFirst = data.bids[0][0];
288
349
  }
289
- if (isNaN(asksFrist) || isNaN(bidsFirst) || !ticker)
290
- return 0;
291
- return [asksFrist, bidsFirst, ticker["24h_close"]].sort()[1];
292
- }, [ticker?.["24h_close"], data]);
293
- (0, react_1.useEffect)(() => {
350
+ if (isNaN(asksFrist) || isNaN(bidsFirst) || !ticker) return 0;
351
+ return [
352
+ asksFrist,
353
+ bidsFirst,
354
+ ticker["24h_close"]
355
+ ].sort()[1];
356
+ }, [
357
+ ticker?.["24h_close"],
358
+ data
359
+ ]);
360
+ (0, _react.useEffect)(()=>{
294
361
  prevMiddlePrice.current = middlePrice;
295
- }, [middlePrice]);
362
+ }, [
363
+ middlePrice
364
+ ]);
296
365
  return [
297
366
  {
298
367
  asks: reducedData.asks.slice(-level),
299
368
  bids: reducedData.bids.slice(0, level),
300
369
  markPrice: markPrice,
301
- middlePrice: [prevMiddlePrice.current, middlePrice],
370
+ middlePrice: [
371
+ prevMiddlePrice.current,
372
+ middlePrice
373
+ ]
302
374
  },
303
- { onDepthChange, depth, allDepths: depths, isLoading, onItemClick },
375
+ {
376
+ onDepthChange,
377
+ depth,
378
+ allDepths: depths,
379
+ isLoading,
380
+ onItemClick
381
+ }
304
382
  ];
305
383
  };
306
- exports.useOrderbookStream = useOrderbookStream;
384
+
385
+ //# sourceMappingURL=useOrderbookStream.js.map
@@ -0,0 +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, 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":["mergeOrderbook","reduceOrderbook","useOrderbookStream","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","Decimal","Math","ceil","mul","toNumber","floor","toString","indexOf","priceStr","index","decimal","slice","decimalDepth","removeTrailingZeros","decimalStr","min","has","item","get","itemPrice","add","set","from","values","newQuantity","newAmount","push","padding","bids","qty","shift","undefined","bidPrice","askPrice","askQty","logStr","reverse","concat","mergeItems","update","filter","findIndex","p","splice","sort","INIT_DATA","symbol","initial","options","SDKError","requestData","setRequestData","useState","setData","isLoading","setIsLoading","config","useSymbolsInfo","setDepth","prevMiddlePrice","useRef","depths","useMemo","tick","base","e","useEffect","ws","useWS","ticker","useTickerStream","eventEmitter","useEventEmitter","needRequestFullOrderbook","orderBookUpdateSub","fullOrderBookUpdateSub","subscribe","event","topic","formatter","message","onMessage","wsData","ts","prevTs","orderbooksService","updateOrderbook","getRawOrderbook","onceSubscribe","id","params","type","setFullOrderbook","resetOrderBook","markPrice","useMarkPrice","onItemClick","useCallback","emit","onDepthChange","reducedData","updateData","middlePrice","asksFrist","bidsFirst","current","allDepths"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}