@orderly.network/hooks 1.2.0-alpha.0 → 1.3.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/configProvider.d.ts +7 -1
- package/esm/configProvider.d.ts.map +1 -1
- package/esm/configProvider.js +44 -18
- package/esm/configProvider.js.map +1 -0
- package/esm/dataProvider.js +24 -19
- package/esm/dataProvider.js.map +1 -0
- package/esm/index.d.ts +1 -0
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +4 -1
- package/esm/index.js.map +1 -0
- package/esm/middleware/signatureMiddleware.js +9 -8
- package/esm/middleware/signatureMiddleware.js.map +1 -0
- package/esm/orderly/orderbook.service.js +39 -28
- package/esm/orderly/orderbook.service.js.map +1 -0
- package/esm/orderly/orderlyHooks.d.ts +3 -0
- package/esm/orderly/orderlyHooks.d.ts.map +1 -1
- package/esm/orderly/orderlyHooks.js +2 -0
- package/esm/orderly/orderlyHooks.js.map +1 -0
- package/esm/orderly/useAccountInfo.js +3 -1
- package/esm/orderly/useAccountInfo.js.map +1 -0
- package/esm/orderly/useChain.js +16 -9
- package/esm/orderly/useChain.js.map +1 -0
- package/esm/orderly/useChains.d.ts +11 -12
- package/esm/orderly/useChains.d.ts.map +1 -1
- package/esm/orderly/useChains.js +68 -46
- package/esm/orderly/useChains.js.map +1 -0
- package/esm/orderly/useCollateral.d.ts +3 -4
- package/esm/orderly/useCollateral.d.ts.map +1 -1
- package/esm/orderly/useCollateral.js +53 -20
- package/esm/orderly/useCollateral.js.map +1 -0
- package/esm/orderly/useDeposit.js +123 -125
- package/esm/orderly/useDeposit.js.map +1 -0
- package/esm/orderly/useFundingRate.js +14 -13
- package/esm/orderly/useFundingRate.js.map +1 -0
- package/esm/orderly/useFundingRates.js +6 -4
- package/esm/orderly/useFundingRates.js.map +1 -0
- package/esm/orderly/useHoldingStream.js +19 -15
- package/esm/orderly/useHoldingStream.js.map +1 -0
- package/esm/orderly/useIndexPrice.js +7 -5
- package/esm/orderly/useIndexPrice.js.map +1 -0
- package/esm/orderly/useLeverage.js +9 -12
- package/esm/orderly/useLeverage.js.map +1 -0
- package/esm/orderly/useMarginRatio.js +27 -13
- package/esm/orderly/useMarginRatio.js.map +1 -0
- package/esm/orderly/useMarkPrice.js +13 -7
- package/esm/orderly/useMarkPrice.js.map +1 -0
- package/esm/orderly/useMarkPricesStream.d.ts +1 -1
- package/esm/orderly/useMarkPricesStream.d.ts.map +1 -1
- package/esm/orderly/useMarkPricesStream.js +9 -8
- package/esm/orderly/useMarkPricesStream.js.map +1 -0
- package/esm/orderly/useMarketTradeStream.js +33 -18
- package/esm/orderly/useMarketTradeStream.js.map +1 -0
- package/esm/orderly/useMarkets.js +144 -81
- package/esm/orderly/useMarkets.js.map +1 -0
- package/esm/orderly/useMarketsStream.js +23 -28
- package/esm/orderly/useMarketsStream.js.map +1 -0
- package/esm/orderly/useMaxQty.d.ts +6 -0
- package/esm/orderly/useMaxQty.d.ts.map +1 -1
- package/esm/orderly/useMaxQty.js +26 -18
- package/esm/orderly/useMaxQty.js.map +1 -0
- package/esm/orderly/useOpenInterest.js +7 -5
- package/esm/orderly/useOpenInterest.js.map +1 -0
- package/esm/orderly/useOrderEntry.js +182 -160
- package/esm/orderly/useOrderEntry.js.map +1 -0
- package/esm/orderly/useOrderStream.js +85 -66
- package/esm/orderly/useOrderStream.js.map +1 -0
- package/esm/orderly/useOrderbookStream.d.ts +2 -3
- package/esm/orderly/useOrderbookStream.d.ts.map +1 -1
- package/esm/orderly/useOrderbookStream.js +164 -101
- package/esm/orderly/useOrderbookStream.js.map +1 -0
- package/esm/orderly/usePositionStream.js +82 -62
- package/esm/orderly/usePositionStream.js.map +1 -0
- package/esm/orderly/usePrivateDataObserver.js +55 -48
- package/esm/orderly/usePrivateDataObserver.js.map +1 -0
- package/esm/orderly/useSettleSubscription.js +8 -6
- package/esm/orderly/useSettleSubscription.js.map +1 -0
- package/esm/orderly/useSymbolPriceRange.js +14 -8
- package/esm/orderly/useSymbolPriceRange.js.map +1 -0
- package/esm/orderly/useSymbolsInfo.js +7 -5
- package/esm/orderly/useSymbolsInfo.js.map +1 -0
- package/esm/orderly/useTickerStream.d.ts +5 -1
- package/esm/orderly/useTickerStream.d.ts.map +1 -1
- package/esm/orderly/useTickerStream.js +26 -29
- package/esm/orderly/useTickerStream.js.map +1 -0
- package/esm/orderly/useWalletSubscription.js +8 -6
- package/esm/orderly/useWalletSubscription.js.map +1 -0
- package/esm/orderly/useWithdraw.js +19 -11
- package/esm/orderly/useWithdraw.js.map +1 -0
- package/esm/orderlyContext.d.ts +8 -1
- package/esm/orderlyContext.d.ts.map +1 -1
- package/esm/orderlyContext.js +2 -1
- package/esm/orderlyContext.js.map +1 -0
- package/esm/services/dataCenter.js +10 -8
- package/esm/services/dataCenter.js.map +1 -0
- package/esm/services/painter/backgroundPaint.js +11 -14
- package/esm/services/painter/backgroundPaint.js.map +1 -0
- package/esm/services/painter/basePaint.js +5 -1
- package/esm/services/painter/basePaint.js.map +1 -0
- package/esm/services/painter/dataPaint.js +53 -50
- package/esm/services/painter/dataPaint.js.map +1 -0
- package/esm/services/painter/layout.config.js +15 -13
- package/esm/services/painter/layout.config.js.map +1 -0
- package/esm/services/painter/painter.js +14 -13
- package/esm/services/painter/painter.js.map +1 -0
- package/esm/services/painter/resource.js +6 -4
- package/esm/services/painter/resource.js.map +1 -0
- package/esm/statusProvider.js +10 -3
- package/esm/statusProvider.js.map +1 -0
- package/esm/unuse/apiPrefixMiddleware.js +18 -16
- package/esm/unuse/apiPrefixMiddleware.js.map +1 -0
- package/esm/unuse/fn.js +3 -1
- package/esm/unuse/fn.js.map +1 -0
- package/esm/unuse/useBalance.js +6 -4
- package/esm/unuse/useBalance.js.map +1 -0
- package/esm/unuse/useFetures.js +26 -18
- package/esm/unuse/useFetures.js.map +1 -0
- package/esm/unuse/useRunOnce.js +10 -7
- package/esm/unuse/useRunOnce.js.map +1 -0
- package/esm/unuse/useSyncEnd.js +5 -4
- package/esm/unuse/useSyncEnd.js.map +1 -0
- package/esm/unuse/useTokenInfo.js +7 -5
- package/esm/unuse/useTokenInfo.js.map +1 -0
- package/esm/unuse/useUnsettlementPnL.js +7 -3
- package/esm/unuse/useUnsettlementPnL.js.map +1 -0
- package/esm/useAccount.js +18 -21
- package/esm/useAccount.js.map +1 -0
- package/esm/useAccountInstance.js +6 -7
- package/esm/useAccountInstance.js.map +1 -0
- package/esm/useBoolean.js +14 -5
- package/esm/useBoolean.js.map +1 -0
- package/esm/useConfig.js +3 -1
- package/esm/useConfig.js.map +1 -0
- package/esm/useEventEmitter.js +4 -2
- package/esm/useEventEmitter.js.map +1 -0
- package/esm/useLazyQuery.js +6 -7
- package/esm/useLazyQuery.js.map +1 -0
- package/esm/useLocalStorage.js +30 -20
- package/esm/useLocalStorage.js.map +1 -0
- package/esm/useMediaQuery.js +11 -9
- package/esm/useMediaQuery.js.map +1 -0
- package/esm/useMutation.js +26 -37
- package/esm/useMutation.js.map +1 -0
- package/esm/useObserve.js +4 -4
- package/esm/useObserve.js.map +1 -0
- package/esm/useParamsCheck.js +8 -10
- package/esm/useParamsCheck.js.map +1 -0
- package/esm/usePoster.js +56 -45
- package/esm/usePoster.js.map +1 -0
- package/esm/usePreloadData.js +9 -5
- package/esm/usePreloadData.js.map +1 -0
- package/esm/usePrivateInfiniteQuery.js +15 -9
- package/esm/usePrivateInfiniteQuery.js.map +1 -0
- package/esm/usePrivateQuery.js +15 -8
- package/esm/usePrivateQuery.js.map +1 -0
- package/esm/useQuery.js +6 -5
- package/esm/useQuery.js.map +1 -0
- package/esm/useSessionStorage.js +28 -19
- package/esm/useSessionStorage.js.map +1 -0
- package/esm/useWS.js +15 -13
- package/esm/useWS.js.map +1 -0
- package/esm/useWsStatus.js +12 -12
- package/esm/useWsStatus.js.map +1 -0
- package/esm/utils/createGetter.js +8 -8
- package/esm/utils/createGetter.js.map +1 -0
- package/esm/utils/createOrder.d.ts +1 -0
- package/esm/utils/createOrder.d.ts.map +1 -1
- package/esm/utils/createOrder.js +59 -43
- package/esm/utils/createOrder.js.map +1 -0
- package/esm/utils/dev.js +6 -4
- package/esm/utils/dev.js.map +1 -0
- package/esm/utils/fetcher.js +3 -1
- package/esm/utils/fetcher.js.map +1 -0
- package/esm/utils/json.js +3 -2
- package/esm/utils/json.js.map +1 -0
- package/esm/utils/orderEntryHelper.js +92 -63
- package/esm/utils/orderEntryHelper.js.map +1 -0
- package/esm/utils/parseHolding.js +10 -6
- package/esm/utils/parseHolding.js.map +1 -0
- package/esm/utils/swr.js +114 -104
- package/esm/utils/swr.js.map +1 -0
- package/esm/version.d.ts +1 -1
- package/esm/version.js +4 -3
- package/esm/version.js.map +1 -0
- package/esm/walletConnectorContext.js +4 -2
- package/esm/walletConnectorContext.js.map +1 -0
- package/lib/configProvider.d.ts +7 -1
- package/lib/configProvider.d.ts.map +1 -1
- package/lib/configProvider.js +108 -56
- package/lib/configProvider.js.map +1 -0
- package/lib/dataProvider.js +50 -29
- package/lib/dataProvider.js.map +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +191 -88
- package/lib/index.js.map +1 -0
- package/lib/middleware/signatureMiddleware.js +22 -15
- package/lib/middleware/signatureMiddleware.js.map +1 -0
- package/lib/orderly/orderbook.service.js +59 -33
- package/lib/orderly/orderbook.service.js.map +1 -0
- package/lib/orderly/orderlyHooks.d.ts +3 -0
- package/lib/orderly/orderlyHooks.d.ts.map +1 -1
- package/lib/orderly/orderlyHooks.js +124 -57
- package/lib/orderly/orderlyHooks.js.map +1 -0
- package/lib/orderly/useAccountInfo.js +14 -6
- package/lib/orderly/useAccountInfo.js.map +1 -0
- package/lib/orderly/useChain.js +30 -17
- package/lib/orderly/useChain.js.map +1 -0
- package/lib/orderly/useChains.d.ts +11 -12
- package/lib/orderly/useChains.d.ts.map +1 -1
- package/lib/orderly/useChains.js +100 -59
- package/lib/orderly/useChains.js.map +1 -0
- package/lib/orderly/useCollateral.d.ts +3 -4
- package/lib/orderly/useCollateral.d.ts.map +1 -1
- package/lib/orderly/useCollateral.js +81 -42
- package/lib/orderly/useCollateral.js.map +1 -0
- package/lib/orderly/useDeposit.js +154 -150
- package/lib/orderly/useDeposit.js.map +1 -0
- package/lib/orderly/useFundingRate.js +29 -22
- package/lib/orderly/useFundingRate.js.map +1 -0
- package/lib/orderly/useFundingRates.js +19 -11
- package/lib/orderly/useFundingRates.js.map +1 -0
- package/lib/orderly/useHoldingStream.js +39 -27
- package/lib/orderly/useHoldingStream.js.map +1 -0
- package/lib/orderly/useIndexPrice.js +24 -14
- package/lib/orderly/useIndexPrice.js.map +1 -0
- package/lib/orderly/useLeverage.js +27 -24
- package/lib/orderly/useLeverage.js.map +1 -0
- package/lib/orderly/useMarginRatio.js +49 -29
- package/lib/orderly/useMarginRatio.js.map +1 -0
- package/lib/orderly/useMarkPrice.js +26 -15
- package/lib/orderly/useMarkPrice.js.map +1 -0
- package/lib/orderly/useMarkPricesStream.d.ts +1 -1
- package/lib/orderly/useMarkPricesStream.d.ts.map +1 -1
- package/lib/orderly/useMarkPricesStream.js +26 -17
- package/lib/orderly/useMarkPricesStream.js.map +1 -0
- package/lib/orderly/useMarketTradeStream.js +47 -26
- package/lib/orderly/useMarketTradeStream.js.map +1 -0
- package/lib/orderly/useMarkets.js +172 -95
- package/lib/orderly/useMarkets.js.map +1 -0
- package/lib/orderly/useMarketsStream.js +44 -41
- package/lib/orderly/useMarketsStream.js.map +1 -0
- package/lib/orderly/useMaxQty.d.ts +6 -0
- package/lib/orderly/useMaxQty.d.ts.map +1 -1
- package/lib/orderly/useMaxQty.js +52 -43
- package/lib/orderly/useMaxQty.js.map +1 -0
- package/lib/orderly/useOpenInterest.js +24 -14
- package/lib/orderly/useOpenInterest.js.map +1 -0
- package/lib/orderly/useOrderEntry.js +238 -210
- package/lib/orderly/useOrderEntry.js.map +1 -0
- package/lib/orderly/useOrderStream.js +111 -84
- package/lib/orderly/useOrderStream.js.map +1 -0
- package/lib/orderly/useOrderbookStream.d.ts +2 -3
- package/lib/orderly/useOrderbookStream.d.ts.map +1 -1
- package/lib/orderly/useOrderbookStream.js +219 -147
- package/lib/orderly/useOrderbookStream.js.map +1 -0
- package/lib/orderly/usePositionStream.js +134 -100
- package/lib/orderly/usePositionStream.js.map +1 -0
- package/lib/orderly/usePrivateDataObserver.js +76 -63
- package/lib/orderly/usePrivateDataObserver.js.map +1 -0
- package/lib/orderly/useSettleSubscription.js +25 -15
- package/lib/orderly/useSettleSubscription.js.map +1 -0
- package/lib/orderly/useSymbolPriceRange.js +29 -23
- package/lib/orderly/useSymbolPriceRange.js.map +1 -0
- package/lib/orderly/useSymbolsInfo.js +23 -15
- package/lib/orderly/useSymbolsInfo.js.map +1 -0
- package/lib/orderly/useTickerStream.d.ts +5 -1
- package/lib/orderly/useTickerStream.d.ts.map +1 -1
- package/lib/orderly/useTickerStream.js +51 -48
- package/lib/orderly/useTickerStream.js.map +1 -0
- package/lib/orderly/useWalletSubscription.js +25 -15
- package/lib/orderly/useWalletSubscription.js.map +1 -0
- package/lib/orderly/useWithdraw.js +36 -22
- package/lib/orderly/useWithdraw.js.map +1 -0
- package/lib/orderlyContext.d.ts +8 -1
- package/lib/orderlyContext.d.ts.map +1 -1
- package/lib/orderlyContext.js +22 -6
- package/lib/orderlyContext.js.map +1 -0
- package/lib/services/dataCenter.js +15 -11
- package/lib/services/dataCenter.js.map +1 -0
- package/lib/services/painter/backgroundPaint.js +21 -18
- package/lib/services/painter/backgroundPaint.js.map +1 -0
- package/lib/services/painter/basePaint.js +14 -4
- package/lib/services/painter/basePaint.js.map +1 -0
- package/lib/services/painter/dataPaint.js +67 -58
- package/lib/services/painter/dataPaint.js.map +1 -0
- package/lib/services/painter/layout.config.js +25 -16
- package/lib/services/painter/layout.config.js.map +1 -0
- package/lib/services/painter/painter.js +27 -20
- package/lib/services/painter/painter.js.map +1 -0
- package/lib/services/painter/resource.js +15 -7
- package/lib/services/painter/resource.js.map +1 -0
- package/lib/statusProvider.js +31 -10
- package/lib/statusProvider.js.map +1 -0
- package/lib/unuse/apiPrefixMiddleware.js +30 -22
- package/lib/unuse/apiPrefixMiddleware.js.map +1 -0
- package/lib/unuse/fn.js +14 -5
- package/lib/unuse/fn.js.map +1 -0
- package/lib/unuse/useBalance.js +23 -13
- package/lib/unuse/useBalance.js.map +1 -0
- package/lib/unuse/useFetures.js +41 -28
- package/lib/unuse/useFetures.js.map +1 -0
- package/lib/unuse/useRunOnce.js +61 -11
- package/lib/unuse/useRunOnce.js.map +1 -0
- package/lib/unuse/useSyncEnd.js +17 -10
- package/lib/unuse/useSyncEnd.js.map +1 -0
- package/lib/unuse/useTokenInfo.js +20 -12
- package/lib/unuse/useTokenInfo.js.map +1 -0
- package/lib/unuse/useUnsettlementPnL.js +21 -11
- package/lib/unuse/useUnsettlementPnL.js.map +1 -0
- package/lib/useAccount.js +32 -29
- package/lib/useAccount.js.map +1 -0
- package/lib/useAccountInstance.js +27 -20
- package/lib/useAccountInstance.js.map +1 -0
- package/lib/useBoolean.js +25 -10
- package/lib/useBoolean.js.map +1 -0
- package/lib/useConfig.js +15 -7
- package/lib/useConfig.js.map +1 -0
- package/lib/useEventEmitter.js +23 -13
- package/lib/useEventEmitter.js.map +1 -0
- package/lib/useLazyQuery.js +25 -23
- package/lib/useLazyQuery.js.map +1 -0
- package/lib/useLocalStorage.js +44 -28
- package/lib/useLocalStorage.js.map +1 -0
- package/lib/useMediaQuery.js +22 -14
- package/lib/useMediaQuery.js.map +1 -0
- package/lib/useMutation.js +47 -52
- package/lib/useMutation.js.map +1 -0
- package/lib/useObserve.js +22 -8
- package/lib/useObserve.js.map +1 -0
- package/lib/useParamsCheck.js +18 -14
- package/lib/useParamsCheck.js.map +1 -0
- package/lib/usePoster.js +80 -74
- package/lib/usePoster.js.map +1 -0
- package/lib/usePreloadData.js +21 -11
- package/lib/usePreloadData.js.map +1 -0
- package/lib/usePrivateInfiniteQuery.js +36 -22
- package/lib/usePrivateInfiniteQuery.js.map +1 -0
- package/lib/usePrivateQuery.js +35 -25
- package/lib/usePrivateQuery.js.map +1 -0
- package/lib/useQuery.js +24 -20
- package/lib/useQuery.js.map +1 -0
- package/lib/useSessionStorage.js +41 -26
- package/lib/useSessionStorage.js.map +1 -0
- package/lib/useWS.js +42 -32
- package/lib/useWS.js.map +1 -0
- package/lib/useWsStatus.js +34 -20
- package/lib/useWsStatus.js.map +1 -0
- package/lib/utils/createGetter.js +19 -14
- package/lib/utils/createGetter.js.map +1 -0
- package/lib/utils/createOrder.d.ts +1 -0
- package/lib/utils/createOrder.d.ts.map +1 -1
- package/lib/utils/createOrder.js +133 -82
- package/lib/utils/createOrder.js.map +1 -0
- package/lib/utils/dev.js +13 -9
- package/lib/utils/dev.js.map +1 -0
- package/lib/utils/fetcher.js +13 -5
- package/lib/utils/fetcher.js.map +1 -0
- package/lib/utils/json.js +12 -5
- package/lib/utils/json.js.map +1 -0
- package/lib/utils/orderEntryHelper.js +125 -82
- package/lib/utils/orderEntryHelper.js.map +1 -0
- package/lib/utils/parseHolding.js +19 -9
- package/lib/utils/parseHolding.js.map +1 -0
- package/lib/utils/swr.js +134 -111
- package/lib/utils/swr.js.map +1 -0
- package/lib/version.d.ts +1 -1
- package/lib/version.js +13 -4
- package/lib/version.js.map +1 -0
- package/lib/walletConnectorContext.js +23 -7
- package/lib/walletConnectorContext.js.map +1 -0
- package/package.json +17 -9
|
@@ -1,91 +1,115 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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 = [
|
|
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
|
|
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
|
|
37
|
-
}
|
|
38
|
-
|
|
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
70
|
const decimalDepth = depth.toString().slice(2).length;
|
|
46
|
-
const decimalStr = decimal.slice(0, (0,
|
|
47
|
-
priceKey = new
|
|
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
|
|
78
|
+
const itemPrice = new _utils.Decimal(item[1]).add(quantity).toNumber();
|
|
54
79
|
// prices.push([price, quantity]);
|
|
55
|
-
prices.set(priceKey, [
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
|
93
|
+
for(let i = 0; i < newData.length; i++){
|
|
64
94
|
const [price, quantity] = newData[i];
|
|
65
|
-
if (isNaN(price) || isNaN(quantity))
|
|
66
|
-
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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([
|
|
97
|
-
|
|
98
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
143
|
-
const mergeItems = (data, update) => {
|
|
166
|
+
const mergeItems = (data, update)=>{
|
|
144
167
|
// let index = -1;
|
|
145
|
-
if (data.length === 0)
|
|
146
|
-
|
|
147
|
-
|
|
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)
|
|
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,82 @@ const mergeItems = (data, update) => {
|
|
|
169
188
|
}
|
|
170
189
|
return data;
|
|
171
190
|
};
|
|
172
|
-
const mergeOrderbook = (data, update)
|
|
173
|
-
let asks = [
|
|
174
|
-
|
|
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
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
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
|
|
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,
|
|
195
|
-
const [data, setData] = (0,
|
|
196
|
-
const [isLoading, setIsLoading] = (0,
|
|
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,
|
|
199
|
-
const [depth, setDepth] = (0,
|
|
219
|
+
const config = (0, _useSymbolsInfo.useSymbolsInfo)()[symbol];
|
|
220
|
+
const [depth, setDepth] = (0, _react.useState)();
|
|
200
221
|
// markPrice, lastPrice
|
|
201
|
-
const prevMiddlePrice = (0,
|
|
202
|
-
const depths = (0,
|
|
222
|
+
const prevMiddlePrice = (0, _react.useRef)(0);
|
|
223
|
+
const depths = (0, _react.useMemo)(()=>{
|
|
203
224
|
const tick = config("quote_tick");
|
|
204
|
-
return [
|
|
205
|
-
|
|
206
|
-
|
|
225
|
+
return [
|
|
226
|
+
tick,
|
|
227
|
+
tick * 10,
|
|
228
|
+
tick * 100,
|
|
229
|
+
tick * 1000
|
|
230
|
+
];
|
|
231
|
+
}, [
|
|
232
|
+
config("quote_tick")
|
|
233
|
+
]);
|
|
234
|
+
(0, _react.useEffect)(()=>{
|
|
207
235
|
setDepth(config("quote_tick"));
|
|
208
|
-
}, [
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
const
|
|
236
|
+
}, [
|
|
237
|
+
config("quote_tick")
|
|
238
|
+
]);
|
|
239
|
+
const ws = (0, _useWS.useWS)();
|
|
240
|
+
const ticker = (0, _useTickerStream.useTickerStream)(symbol);
|
|
241
|
+
const eventEmitter = (0, _useEventEmitter.useEventEmitter)();
|
|
212
242
|
// const orderbookRequest =
|
|
213
|
-
(0,
|
|
243
|
+
(0, _react.useEffect)(()=>{
|
|
214
244
|
let needRequestFullOrderbook = true;
|
|
215
245
|
setIsLoading(true);
|
|
216
246
|
let orderBookUpdateSub;
|
|
217
247
|
let fullOrderBookUpdateSub;
|
|
218
248
|
orderBookUpdateSub = ws.subscribe({
|
|
219
249
|
event: "subscribe",
|
|
220
|
-
topic: `${symbol}@orderbookupdate
|
|
250
|
+
topic: `${symbol}@orderbookupdate`
|
|
221
251
|
}, {
|
|
222
|
-
formatter: (message)
|
|
223
|
-
onMessage: (message)
|
|
252
|
+
formatter: (message)=>message,
|
|
253
|
+
onMessage: (message)=>{
|
|
224
254
|
const { data: wsData, ts } = message;
|
|
225
255
|
const { asks, bids, prevTs } = wsData;
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
256
|
+
_orderbookservice.default.updateOrderbook(symbol, {
|
|
257
|
+
asks,
|
|
258
|
+
bids,
|
|
259
|
+
ts,
|
|
260
|
+
prevTs
|
|
261
|
+
}, ()=>needRequestFullOrderbook = true);
|
|
262
|
+
const data = _orderbookservice.default.getRawOrderbook(symbol);
|
|
263
|
+
setData({
|
|
264
|
+
bids: data.bids,
|
|
265
|
+
asks: data.asks
|
|
266
|
+
});
|
|
229
267
|
}
|
|
230
268
|
});
|
|
231
269
|
if (needRequestFullOrderbook) {
|
|
@@ -235,50 +273,66 @@ const useOrderbookStream = (symbol, initial = INIT_DATA, options) => {
|
|
|
235
273
|
id: `${symbol}@orderbook`,
|
|
236
274
|
params: {
|
|
237
275
|
type: "orderbook",
|
|
238
|
-
symbol: symbol
|
|
239
|
-
}
|
|
276
|
+
symbol: symbol
|
|
277
|
+
}
|
|
240
278
|
}, {
|
|
241
|
-
formatter: (message)
|
|
242
|
-
onMessage: (message)
|
|
279
|
+
formatter: (message)=>message,
|
|
280
|
+
onMessage: (message)=>{
|
|
243
281
|
const { symbol, asks, bids, ts } = message.data;
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
282
|
+
_orderbookservice.default.setFullOrderbook(symbol, {
|
|
283
|
+
asks,
|
|
284
|
+
bids,
|
|
285
|
+
ts
|
|
286
|
+
});
|
|
287
|
+
const data = _orderbookservice.default.getRawOrderbook(symbol);
|
|
288
|
+
setData({
|
|
289
|
+
bids: data.bids,
|
|
290
|
+
asks: data.asks
|
|
291
|
+
});
|
|
247
292
|
setIsLoading(false);
|
|
248
|
-
}
|
|
293
|
+
}
|
|
249
294
|
});
|
|
250
295
|
needRequestFullOrderbook = false;
|
|
251
296
|
}
|
|
252
|
-
return ()
|
|
297
|
+
return ()=>{
|
|
253
298
|
// unsubscribe
|
|
254
299
|
orderBookUpdateSub?.();
|
|
255
300
|
fullOrderBookUpdateSub?.();
|
|
256
|
-
|
|
301
|
+
_orderbookservice.default.resetOrderBook(symbol);
|
|
257
302
|
setData(INIT_DATA);
|
|
258
303
|
};
|
|
259
|
-
}, [
|
|
304
|
+
}, [
|
|
305
|
+
symbol
|
|
306
|
+
]);
|
|
260
307
|
// const {data:markPrices} = useMarkPricesStream();
|
|
261
|
-
const { data: markPrice } = (0,
|
|
262
|
-
const onItemClick = (0,
|
|
308
|
+
const { data: markPrice } = (0, _useMarkPrice.useMarkPrice)(symbol);
|
|
309
|
+
const onItemClick = (0, _react.useCallback)((item)=>{
|
|
263
310
|
eventEmitter.emit("orderbook:item:click", item);
|
|
264
311
|
}, []);
|
|
265
|
-
const onDepthChange = (0,
|
|
312
|
+
const onDepthChange = (0, _react.useCallback)((depth)=>{
|
|
266
313
|
//
|
|
267
|
-
setDepth(()
|
|
314
|
+
setDepth(()=>depth);
|
|
268
315
|
}, []);
|
|
269
|
-
const reducedData =
|
|
270
|
-
asks: [
|
|
271
|
-
|
|
316
|
+
const reducedData = reduceOrderbook(depth, level, padding, {
|
|
317
|
+
asks: [
|
|
318
|
+
...data.asks
|
|
319
|
+
],
|
|
320
|
+
bids: [
|
|
321
|
+
...data.bids
|
|
322
|
+
]
|
|
272
323
|
});
|
|
273
324
|
// emit the asks0 and bids0
|
|
274
|
-
(0,
|
|
325
|
+
(0, _react.useEffect)(()=>{
|
|
275
326
|
const updateData = [
|
|
276
327
|
reducedData.asks?.[reducedData.asks.length - 1]?.[0],
|
|
277
328
|
reducedData.bids?.[0]?.[0]
|
|
278
329
|
];
|
|
279
330
|
eventEmitter.emit("orderbook:update", updateData);
|
|
280
|
-
}, [
|
|
281
|
-
|
|
331
|
+
}, [
|
|
332
|
+
reducedData.asks?.[reducedData.asks.length - 1]?.[0],
|
|
333
|
+
reducedData.bids?.[0]?.[0]
|
|
334
|
+
]);
|
|
335
|
+
const middlePrice = (0, _react.useMemo)(()=>{
|
|
282
336
|
let asksFrist = 0, bidsFirst = 0;
|
|
283
337
|
if (data.asks.length > 0) {
|
|
284
338
|
asksFrist = reducedData.asks?.[reducedData.asks.length - 1]?.[0];
|
|
@@ -286,21 +340,39 @@ const useOrderbookStream = (symbol, initial = INIT_DATA, options) => {
|
|
|
286
340
|
if (data.bids.length > 0) {
|
|
287
341
|
bidsFirst = data.bids[0][0];
|
|
288
342
|
}
|
|
289
|
-
if (isNaN(asksFrist) || isNaN(bidsFirst) || !ticker)
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
343
|
+
if (isNaN(asksFrist) || isNaN(bidsFirst) || !ticker) return 0;
|
|
344
|
+
return [
|
|
345
|
+
asksFrist,
|
|
346
|
+
bidsFirst,
|
|
347
|
+
ticker["24h_close"]
|
|
348
|
+
].sort()[1];
|
|
349
|
+
}, [
|
|
350
|
+
ticker?.["24h_close"],
|
|
351
|
+
data
|
|
352
|
+
]);
|
|
353
|
+
(0, _react.useEffect)(()=>{
|
|
294
354
|
prevMiddlePrice.current = middlePrice;
|
|
295
|
-
}, [
|
|
355
|
+
}, [
|
|
356
|
+
middlePrice
|
|
357
|
+
]);
|
|
296
358
|
return [
|
|
297
359
|
{
|
|
298
360
|
asks: reducedData.asks.slice(-level),
|
|
299
361
|
bids: reducedData.bids.slice(0, level),
|
|
300
362
|
markPrice: markPrice,
|
|
301
|
-
middlePrice: [
|
|
363
|
+
middlePrice: [
|
|
364
|
+
prevMiddlePrice.current,
|
|
365
|
+
middlePrice
|
|
366
|
+
]
|
|
302
367
|
},
|
|
303
|
-
{
|
|
368
|
+
{
|
|
369
|
+
onDepthChange,
|
|
370
|
+
depth,
|
|
371
|
+
allDepths: depths,
|
|
372
|
+
isLoading,
|
|
373
|
+
onItemClick
|
|
374
|
+
}
|
|
304
375
|
];
|
|
305
376
|
};
|
|
306
|
-
|
|
377
|
+
|
|
378
|
+
//# 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} 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":["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","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","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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"}
|