@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.
- 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 +173 -103
- 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 +227 -148
- 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
|
-
const decimalDepth = depth.toString().slice(2).length;
|
|
46
|
-
const decimalStr = decimal.slice(0, (0,
|
|
47
|
-
priceKey = new
|
|
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
|
|
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,89 @@ 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
|
-
|
|
205
|
-
|
|
206
|
-
|
|
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
|
-
}, [
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
const
|
|
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,
|
|
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)
|
|
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
|
-
|
|
227
|
-
|
|
228
|
-
|
|
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)
|
|
242
|
-
onMessage: (message)
|
|
286
|
+
formatter: (message)=>message,
|
|
287
|
+
onMessage: (message)=>{
|
|
243
288
|
const { symbol, asks, bids, ts } = message.data;
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
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
|
-
|
|
308
|
+
_orderbookservice.default.resetOrderBook(symbol);
|
|
257
309
|
setData(INIT_DATA);
|
|
258
310
|
};
|
|
259
|
-
}, [
|
|
311
|
+
}, [
|
|
312
|
+
symbol
|
|
313
|
+
]);
|
|
260
314
|
// const {data:markPrices} = useMarkPricesStream();
|
|
261
|
-
const { data: markPrice } = (0,
|
|
262
|
-
const onItemClick = (0,
|
|
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,
|
|
319
|
+
const onDepthChange = (0, _react.useCallback)((depth)=>{
|
|
266
320
|
//
|
|
267
|
-
setDepth(()
|
|
321
|
+
setDepth(()=>depth);
|
|
268
322
|
}, []);
|
|
269
|
-
const reducedData =
|
|
270
|
-
asks: [
|
|
271
|
-
|
|
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,
|
|
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
|
-
}, [
|
|
281
|
-
|
|
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
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
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
|
-
}, [
|
|
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: [
|
|
370
|
+
middlePrice: [
|
|
371
|
+
prevMiddlePrice.current,
|
|
372
|
+
middlePrice
|
|
373
|
+
]
|
|
302
374
|
},
|
|
303
|
-
{
|
|
375
|
+
{
|
|
376
|
+
onDepthChange,
|
|
377
|
+
depth,
|
|
378
|
+
allDepths: depths,
|
|
379
|
+
isLoading,
|
|
380
|
+
onItemClick
|
|
381
|
+
}
|
|
304
382
|
];
|
|
305
383
|
};
|
|
306
|
-
|
|
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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"}
|