@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
|
@@ -9,57 +9,56 @@ import { pathOr, propOr } from "ramda";
|
|
|
9
9
|
import { parseHolding } from "../utils/parseHolding";
|
|
10
10
|
import { zero } from "@orderly.network/utils";
|
|
11
11
|
import { useMarketsStream } from "./useMarketsStream";
|
|
12
|
-
export const usePositionStream = (
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
*/
|
|
16
|
-
symbol, options) => {
|
|
12
|
+
export const usePositionStream = (/**
|
|
13
|
+
* If symbol is passed, only the position of that symbol will be returned.
|
|
14
|
+
*/ symbol, options)=>{
|
|
17
15
|
const symbolInfo = useSymbolsInfo();
|
|
18
16
|
const { data: accountInfo } = usePrivateQuery("/v1/client/info");
|
|
19
17
|
const { data: holding } = usePrivateQuery("/v1/client/holding", {
|
|
20
|
-
formatter: (data)
|
|
18
|
+
formatter: (data)=>{
|
|
21
19
|
return data.holding;
|
|
22
|
-
}
|
|
20
|
+
}
|
|
23
21
|
});
|
|
24
22
|
const fundingRates = useFundingRates();
|
|
25
|
-
const { data, error, mutate: refreshPositions
|
|
23
|
+
const { data, error, mutate: refreshPositions } = usePrivateQuery(`/v1/positions`, {
|
|
26
24
|
// revalidateOnFocus: false,
|
|
27
25
|
// revalidateOnReconnect: false,
|
|
28
26
|
// dedupingInterval: 200,
|
|
29
27
|
// keepPreviousData: false,
|
|
30
28
|
// revalidateIfStale: true,
|
|
31
29
|
...options,
|
|
32
|
-
formatter: (data)
|
|
33
|
-
onError: (err)
|
|
30
|
+
formatter: (data)=>data,
|
|
31
|
+
onError: (err)=>{}
|
|
34
32
|
});
|
|
35
33
|
const { data: markPrices } = useMarkPricesStream();
|
|
36
34
|
const [priceMode, setPriceMode] = useState(options?.calcMode || "markPrice");
|
|
37
|
-
useEffect(()
|
|
35
|
+
useEffect(()=>{
|
|
38
36
|
if (options?.calcMode && priceMode !== options?.calcMode) {
|
|
39
37
|
setPriceMode(options?.calcMode);
|
|
40
38
|
}
|
|
41
|
-
}, [
|
|
39
|
+
}, [
|
|
40
|
+
options?.calcMode
|
|
41
|
+
]);
|
|
42
42
|
const { data: tickers } = useMarketsStream();
|
|
43
43
|
// console.log("mark prices", markPrices);
|
|
44
44
|
// console.log("tickers", tickers);
|
|
45
|
-
const tickerPrices = useMemo(()
|
|
45
|
+
const tickerPrices = useMemo(()=>{
|
|
46
46
|
const data = Object.create(null);
|
|
47
|
-
tickers?.forEach((item)
|
|
47
|
+
tickers?.forEach((item)=>{
|
|
48
48
|
// @ts-ignore
|
|
49
49
|
data[item.symbol] = item["24h_close"];
|
|
50
50
|
});
|
|
51
51
|
return data;
|
|
52
|
-
}, [
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
});
|
|
52
|
+
}, [
|
|
53
|
+
tickers
|
|
54
|
+
]);
|
|
55
|
+
const formatedPositions = useMemo(()=>{
|
|
56
|
+
if (!data?.rows || symbolInfo.isNil || !accountInfo) return null;
|
|
57
|
+
const filteredData = typeof symbol === "undefined" || symbol === "" ? data.rows : data.rows.filter((item)=>{
|
|
58
|
+
return item.symbol === symbol;
|
|
59
|
+
});
|
|
61
60
|
let unrealPnL_total = zero, notional_total = zero, unsettlementPnL_total = zero;
|
|
62
|
-
const formatted = filteredData.map((item)
|
|
61
|
+
const formatted = filteredData.map((item)=>{
|
|
63
62
|
// const price = (markPrices as any)[item.symbol] ?? item.mark_price;
|
|
64
63
|
const unRealizedPrice = propOr(item.mark_price, item.symbol, priceMode === "markPrice" ? markPrices : tickerPrices);
|
|
65
64
|
const price = propOr(item.mark_price, item.symbol, markPrices);
|
|
@@ -69,7 +68,7 @@ symbol, options) => {
|
|
|
69
68
|
const unrealPnl = positions.unrealizedPnL({
|
|
70
69
|
qty: item.position_qty,
|
|
71
70
|
openPrice: item?.average_open_price,
|
|
72
|
-
markPrice: unRealizedPrice
|
|
71
|
+
markPrice: unRealizedPrice
|
|
73
72
|
});
|
|
74
73
|
const imr = account.IMR({
|
|
75
74
|
maxLeverage: accountInfo.max_leverage,
|
|
@@ -77,20 +76,20 @@ symbol, options) => {
|
|
|
77
76
|
IMR_Factor: accountInfo.imr_factor[item.symbol],
|
|
78
77
|
positionNotional: notional,
|
|
79
78
|
ordersNotional: 0,
|
|
80
|
-
IMR_factor_power: 4 / 5
|
|
79
|
+
IMR_factor_power: 4 / 5
|
|
81
80
|
});
|
|
82
81
|
const unrealPnlROI = positions.unrealizedPnLROI({
|
|
83
82
|
positionQty: item.position_qty,
|
|
84
83
|
openPrice: item.average_open_price,
|
|
85
84
|
IMR: imr,
|
|
86
|
-
unrealizedPnL: unrealPnl
|
|
85
|
+
unrealizedPnL: unrealPnl
|
|
87
86
|
});
|
|
88
87
|
const unsettlementPnL = positions.unsettlementPnL({
|
|
89
88
|
positionQty: item.position_qty,
|
|
90
89
|
markPrice: price,
|
|
91
90
|
costPosition: item.cost_position,
|
|
92
91
|
sumUnitaryFunding: fundingRates[item.symbol]?.("sum_unitary_funding", 0),
|
|
93
|
-
lastSumUnitaryFunding: item.last_sum_unitary_funding
|
|
92
|
+
lastSumUnitaryFunding: item.last_sum_unitary_funding
|
|
94
93
|
});
|
|
95
94
|
unrealPnL_total = unrealPnL_total.add(unrealPnl);
|
|
96
95
|
notional_total = notional_total.add(notional);
|
|
@@ -102,7 +101,7 @@ symbol, options) => {
|
|
|
102
101
|
notional,
|
|
103
102
|
unsettlement_pnl: unsettlementPnL,
|
|
104
103
|
unrealized_pnl: unrealPnl,
|
|
105
|
-
unrealized_pnl_ROI: unrealPnlROI
|
|
104
|
+
unrealized_pnl_ROI: unrealPnlROI
|
|
106
105
|
};
|
|
107
106
|
});
|
|
108
107
|
return [
|
|
@@ -110,8 +109,8 @@ symbol, options) => {
|
|
|
110
109
|
{
|
|
111
110
|
unrealPnL: unrealPnL_total.toNumber(),
|
|
112
111
|
notional: notional_total.toNumber(),
|
|
113
|
-
unsettledPnL: unsettlementPnL_total.toNumber()
|
|
114
|
-
}
|
|
112
|
+
unsettledPnL: unsettlementPnL_total.toNumber()
|
|
113
|
+
}
|
|
115
114
|
];
|
|
116
115
|
}, [
|
|
117
116
|
data?.rows,
|
|
@@ -121,57 +120,71 @@ symbol, options) => {
|
|
|
121
120
|
priceMode,
|
|
122
121
|
tickerPrices,
|
|
123
122
|
symbol,
|
|
124
|
-
holding
|
|
123
|
+
holding
|
|
125
124
|
]);
|
|
126
125
|
// const showSymbol = useCallback((symbol: string) => {
|
|
127
126
|
// setVisibleSymbol(symbol);
|
|
128
127
|
// }, []);
|
|
129
|
-
const [totalCollateral, totalValue, totalUnrealizedROI] = useMemo(()
|
|
128
|
+
const [totalCollateral, totalValue, totalUnrealizedROI] = useMemo(()=>{
|
|
130
129
|
if (!holding || !markPrices) {
|
|
131
|
-
return [
|
|
130
|
+
return [
|
|
131
|
+
zero,
|
|
132
|
+
zero,
|
|
133
|
+
0
|
|
134
|
+
];
|
|
132
135
|
}
|
|
133
|
-
const unsettlemnedPnL = pathOr(0, [
|
|
134
|
-
|
|
136
|
+
const unsettlemnedPnL = pathOr(0, [
|
|
137
|
+
1,
|
|
138
|
+
"unsettledPnL"
|
|
139
|
+
])(formatedPositions);
|
|
140
|
+
const unrealizedPnL = pathOr(0, [
|
|
141
|
+
1,
|
|
142
|
+
"unrealPnL"
|
|
143
|
+
])(formatedPositions);
|
|
135
144
|
const [USDC_holding, nonUSDC] = parseHolding(holding, markPrices);
|
|
136
145
|
const totalCollateral = account.totalCollateral({
|
|
137
146
|
USDCHolding: USDC_holding,
|
|
138
147
|
nonUSDCHolding: nonUSDC,
|
|
139
|
-
unsettlementPnL: unsettlemnedPnL
|
|
148
|
+
unsettlementPnL: unsettlemnedPnL
|
|
140
149
|
});
|
|
141
150
|
const totalValue = account.totalValue({
|
|
142
151
|
totalUnsettlementPnL: unsettlemnedPnL,
|
|
143
152
|
USDCHolding: USDC_holding,
|
|
144
|
-
nonUSDCHolding: nonUSDC
|
|
153
|
+
nonUSDCHolding: nonUSDC
|
|
145
154
|
});
|
|
146
155
|
const totalUnrealizedROI = account.totalUnrealizedROI({
|
|
147
156
|
totalUnrealizedPnL: unrealizedPnL,
|
|
148
|
-
totalValue: totalValue.toNumber()
|
|
157
|
+
totalValue: totalValue.toNumber()
|
|
149
158
|
});
|
|
150
|
-
return [
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
159
|
+
return [
|
|
160
|
+
totalCollateral,
|
|
161
|
+
totalValue,
|
|
162
|
+
totalUnrealizedROI
|
|
163
|
+
];
|
|
164
|
+
}, [
|
|
165
|
+
holding,
|
|
166
|
+
formatedPositions,
|
|
167
|
+
markPrices
|
|
168
|
+
]);
|
|
169
|
+
const positionsRows = useMemo(()=>{
|
|
170
|
+
if (!formatedPositions) return null;
|
|
171
|
+
if (!symbolInfo || !accountInfo) return formatedPositions[0];
|
|
157
172
|
const total = totalCollateral.toNumber();
|
|
158
|
-
let rows = formatedPositions[0]
|
|
159
|
-
.filter((item) => item.position_qty !== 0)
|
|
160
|
-
.map((item) => {
|
|
173
|
+
let rows = formatedPositions[0].filter((item)=>item.position_qty !== 0).map((item)=>{
|
|
161
174
|
const info = symbolInfo?.[item.symbol];
|
|
162
175
|
const MMR = positions.MMR({
|
|
163
176
|
baseMMR: info("base_mmr"),
|
|
164
177
|
baseIMR: info("base_imr"),
|
|
165
178
|
IMRFactor: accountInfo.imr_factor[item.symbol],
|
|
166
179
|
positionNotional: item.notional,
|
|
167
|
-
IMR_factor_power: 4 / 5
|
|
180
|
+
IMR_factor_power: 4 / 5
|
|
168
181
|
});
|
|
169
182
|
return {
|
|
170
183
|
...item,
|
|
171
184
|
mm: positions.maintenanceMargin({
|
|
172
185
|
positionQty: item.position_qty,
|
|
173
186
|
markPrice: item.mark_price,
|
|
174
|
-
MMR
|
|
187
|
+
MMR
|
|
175
188
|
}),
|
|
176
189
|
// est_liq_price: positions.liqPrice({
|
|
177
190
|
// markPrice: item.mark_price,
|
|
@@ -179,25 +192,30 @@ symbol, options) => {
|
|
|
179
192
|
// positionQty: item.position_qty,
|
|
180
193
|
// MMR,
|
|
181
194
|
// }),
|
|
182
|
-
mmr: MMR
|
|
195
|
+
mmr: MMR
|
|
183
196
|
};
|
|
184
197
|
});
|
|
185
198
|
// calculate est_liq_price
|
|
186
|
-
rows = rows.map((item)
|
|
199
|
+
rows = rows.map((item)=>{
|
|
187
200
|
const est_liq_price = positions.liqPrice({
|
|
188
201
|
markPrice: item.mark_price,
|
|
189
202
|
totalCollateral: total,
|
|
190
203
|
positionQty: item.position_qty,
|
|
191
204
|
positions: rows,
|
|
192
|
-
MMR: item.mmr
|
|
205
|
+
MMR: item.mmr
|
|
193
206
|
});
|
|
194
207
|
return {
|
|
195
208
|
...item,
|
|
196
|
-
est_liq_price
|
|
209
|
+
est_liq_price
|
|
197
210
|
};
|
|
198
211
|
});
|
|
199
212
|
return rows;
|
|
200
|
-
}, [
|
|
213
|
+
}, [
|
|
214
|
+
formatedPositions,
|
|
215
|
+
symbolInfo,
|
|
216
|
+
accountInfo,
|
|
217
|
+
totalCollateral
|
|
218
|
+
]);
|
|
201
219
|
// useEffect(() => {
|
|
202
220
|
// ee.on("positions:changed", () => {
|
|
203
221
|
// updatePositions();
|
|
@@ -208,12 +226,12 @@ symbol, options) => {
|
|
|
208
226
|
{
|
|
209
227
|
rows: positionsRows,
|
|
210
228
|
aggregated: {
|
|
211
|
-
...
|
|
212
|
-
unrealPnlROI: totalUnrealizedROI
|
|
229
|
+
...formatedPositions?.[1] ?? {},
|
|
230
|
+
unrealPnlROI: totalUnrealizedROI
|
|
213
231
|
},
|
|
214
232
|
totalCollateral,
|
|
215
233
|
totalValue,
|
|
216
|
-
totalUnrealizedROI
|
|
234
|
+
totalUnrealizedROI
|
|
217
235
|
},
|
|
218
236
|
positionInfoGetter,
|
|
219
237
|
{
|
|
@@ -222,12 +240,14 @@ symbol, options) => {
|
|
|
222
240
|
// showSymbol,
|
|
223
241
|
error,
|
|
224
242
|
// loadMore: () => {},
|
|
225
|
-
refresh: refreshPositions
|
|
226
|
-
}
|
|
243
|
+
refresh: refreshPositions
|
|
244
|
+
}
|
|
227
245
|
];
|
|
228
246
|
};
|
|
229
247
|
export const pathOr_unsettledPnLPathOr = pathOr(0, [
|
|
230
248
|
0,
|
|
231
249
|
"aggregated",
|
|
232
|
-
"unsettledPnL"
|
|
250
|
+
"unsettledPnL"
|
|
233
251
|
]);
|
|
252
|
+
|
|
253
|
+
//# sourceMappingURL=usePositionStream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/orderly/usePositionStream.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState, useRef } from \"react\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport { account, positions } from \"@orderly.network/perp\";\nimport { type SWRConfiguration } from \"swr\";\nimport useSWRSubscription from \"swr/subscription\";\nimport { createGetter } from \"../utils/createGetter\";\nimport { useFundingRates } from \"./useFundingRates\";\nimport { type API, OrderEntity } from \"@orderly.network/types\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { pathOr, propOr } from \"ramda\";\nimport { parseHolding } from \"../utils/parseHolding\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\nimport { useWS } from \"../useWS\";\nimport { useMarketsStream } from \"./useMarketsStream\";\n\ntype PriceMode = \"markPrice\" | \"lastPrice\";\n\nexport interface PositionReturn {\n data: any[];\n loading: boolean;\n close: (\n order: Pick<OrderEntity, \"order_type\" | \"order_price\" | \"side\">\n ) => void;\n}\n\nexport const usePositionStream = (\n /**\n * If symbol is passed, only the position of that symbol will be returned.\n */\n symbol?: string,\n options?: SWRConfiguration & { calcMode?: PriceMode }\n) => {\n const symbolInfo = useSymbolsInfo();\n const { data: accountInfo } =\n usePrivateQuery<API.AccountInfo>(\"/v1/client/info\");\n\n const { data: holding } = usePrivateQuery<API.Holding[]>(\n \"/v1/client/holding\",\n {\n formatter: (data) => {\n return data.holding;\n },\n }\n );\n\n const fundingRates = useFundingRates();\n\n const {\n data,\n error,\n mutate: refreshPositions,\n } = usePrivateQuery<API.PositionInfo>(`/v1/positions`, {\n // revalidateOnFocus: false,\n // revalidateOnReconnect: false,\n // dedupingInterval: 200,\n // keepPreviousData: false,\n // revalidateIfStale: true,\n ...options,\n\n formatter: (data) => data,\n onError: (err) => {},\n });\n\n const { data: markPrices } = useMarkPricesStream();\n\n const [priceMode, setPriceMode] = useState(options?.calcMode || \"markPrice\");\n\n useEffect(() => {\n if (options?.calcMode && priceMode !== options?.calcMode) {\n setPriceMode(options?.calcMode);\n }\n }, [options?.calcMode]);\n\n const { data: tickers } = useMarketsStream();\n // console.log(\"mark prices\", markPrices);\n // console.log(\"tickers\", tickers);\n\n const tickerPrices = useMemo(() => {\n const data: Record<string, number> = Object.create(null);\n tickers?.forEach((item) => {\n // @ts-ignore\n data[item.symbol] = item[\"24h_close\"];\n });\n return data;\n }, [tickers]);\n\n const formatedPositions = useMemo<[API.PositionExt[], any] | null>(() => {\n if (!data?.rows || symbolInfo.isNil || !accountInfo) return null;\n\n const filteredData =\n typeof symbol === \"undefined\" || symbol === \"\"\n ? data.rows\n : data.rows.filter((item) => {\n return item.symbol === symbol;\n });\n\n let unrealPnL_total = zero,\n notional_total = zero,\n unsettlementPnL_total = zero;\n\n const formatted = filteredData.map((item: API.Position) => {\n // const price = (markPrices as any)[item.symbol] ?? item.mark_price;\n const unRealizedPrice = propOr(\n item.mark_price,\n item.symbol,\n priceMode === \"markPrice\" ? markPrices : tickerPrices\n ) as unknown as number;\n\n const price = propOr(\n item.mark_price,\n item.symbol,\n markPrices\n ) as unknown as number;\n\n const info = symbolInfo[item.symbol];\n //\n\n const notional = positions.notional(item.position_qty, price);\n\n const unrealPnl = positions.unrealizedPnL({\n qty: item.position_qty,\n openPrice: item?.average_open_price,\n markPrice: unRealizedPrice,\n });\n\n const imr = account.IMR({\n maxLeverage: accountInfo.max_leverage,\n baseIMR: info(\"base_imr\"),\n IMR_Factor: accountInfo.imr_factor[item.symbol] as number,\n positionNotional: notional,\n ordersNotional: 0,\n IMR_factor_power: 4 / 5,\n });\n\n const unrealPnlROI = positions.unrealizedPnLROI({\n positionQty: item.position_qty,\n openPrice: item.average_open_price,\n IMR: imr,\n unrealizedPnL: unrealPnl,\n });\n\n const unsettlementPnL = positions.unsettlementPnL({\n positionQty: item.position_qty,\n markPrice: price,\n costPosition: item.cost_position,\n sumUnitaryFunding: fundingRates[item.symbol]?.(\n \"sum_unitary_funding\",\n 0\n ),\n lastSumUnitaryFunding: item.last_sum_unitary_funding,\n });\n\n unrealPnL_total = unrealPnL_total.add(unrealPnl);\n notional_total = notional_total.add(notional);\n unsettlementPnL_total = unsettlementPnL_total.add(unsettlementPnL);\n\n return {\n ...item,\n mark_price: price,\n mm: 0,\n notional,\n unsettlement_pnl: unsettlementPnL,\n unrealized_pnl: unrealPnl,\n unrealized_pnl_ROI: unrealPnlROI,\n };\n });\n\n return [\n formatted,\n {\n unrealPnL: unrealPnL_total.toNumber(),\n notional: notional_total.toNumber(),\n unsettledPnL: unsettlementPnL_total.toNumber(),\n },\n ];\n }, [\n data?.rows,\n symbolInfo,\n accountInfo,\n markPrices,\n priceMode,\n tickerPrices,\n symbol,\n holding,\n ]);\n\n // const showSymbol = useCallback((symbol: string) => {\n // setVisibleSymbol(symbol);\n // }, []);\n\n const [totalCollateral, totalValue, totalUnrealizedROI] = useMemo<\n [Decimal, Decimal, number]\n >(() => {\n if (!holding || !markPrices) {\n return [zero, zero, 0];\n }\n const unsettlemnedPnL = pathOr(0, [1, \"unsettledPnL\"])(formatedPositions);\n const unrealizedPnL = pathOr(0, [1, \"unrealPnL\"])(formatedPositions);\n\n const [USDC_holding, nonUSDC] = parseHolding(holding, markPrices);\n\n const totalCollateral = account.totalCollateral({\n USDCHolding: USDC_holding,\n nonUSDCHolding: nonUSDC,\n unsettlementPnL: unsettlemnedPnL,\n });\n\n const totalValue = account.totalValue({\n totalUnsettlementPnL: unsettlemnedPnL,\n USDCHolding: USDC_holding,\n nonUSDCHolding: nonUSDC,\n });\n\n const totalUnrealizedROI = account.totalUnrealizedROI({\n totalUnrealizedPnL: unrealizedPnL,\n totalValue: totalValue.toNumber(),\n });\n\n return [totalCollateral, totalValue, totalUnrealizedROI];\n }, [holding, formatedPositions, markPrices]);\n\n const positionsRows = useMemo(() => {\n if (!formatedPositions) return null;\n\n if (!symbolInfo || !accountInfo) return formatedPositions[0];\n\n const total = totalCollateral.toNumber();\n\n let rows = formatedPositions[0]\n .filter((item) => item.position_qty !== 0)\n .map((item) => {\n const info = symbolInfo?.[item.symbol];\n\n const MMR = positions.MMR({\n baseMMR: info(\"base_mmr\"),\n baseIMR: info(\"base_imr\"),\n IMRFactor: accountInfo.imr_factor[item.symbol] as number,\n positionNotional: item.notional,\n IMR_factor_power: 4 / 5,\n });\n\n return {\n ...item,\n mm: positions.maintenanceMargin({\n positionQty: item.position_qty,\n markPrice: item.mark_price,\n MMR,\n }),\n // est_liq_price: positions.liqPrice({\n // markPrice: item.mark_price,\n // totalCollateral: total,\n // positionQty: item.position_qty,\n // MMR,\n // }),\n mmr: MMR,\n };\n });\n\n // calculate est_liq_price\n rows = rows.map((item) => {\n const est_liq_price = positions.liqPrice({\n markPrice: item.mark_price,\n totalCollateral: total,\n positionQty: item.position_qty,\n positions: rows,\n MMR: item.mmr,\n });\n return {\n ...item,\n est_liq_price,\n };\n });\n\n return rows;\n }, [formatedPositions, symbolInfo, accountInfo, totalCollateral]);\n\n // useEffect(() => {\n // ee.on(\"positions:changed\", () => {\n // updatePositions();\n // });\n // }, []);\n\n const positionInfoGetter = createGetter<\n Omit<API.PositionInfo, \"rows\">,\n keyof Omit<API.PositionInfo, \"rows\">\n >(data as any, 1);\n\n return [\n {\n rows: positionsRows,\n aggregated: {\n ...(formatedPositions?.[1] ?? {}),\n unrealPnlROI: totalUnrealizedROI,\n },\n totalCollateral,\n totalValue,\n totalUnrealizedROI,\n },\n positionInfoGetter,\n {\n // close: onClosePosition,\n loading: false,\n // showSymbol,\n error,\n // loadMore: () => {},\n refresh: refreshPositions,\n },\n ] as const;\n};\n\nexport const pathOr_unsettledPnLPathOr = pathOr(0, [\n 0,\n \"aggregated\",\n \"unsettledPnL\",\n]);\n"],"names":["useEffect","useMemo","useState","usePrivateQuery","account","positions","createGetter","useFundingRates","useSymbolsInfo","useMarkPricesStream","pathOr","propOr","parseHolding","zero","useMarketsStream","usePositionStream","symbol","options","symbolInfo","data","accountInfo","holding","formatter","fundingRates","error","mutate","refreshPositions","onError","err","markPrices","priceMode","setPriceMode","calcMode","tickers","tickerPrices","Object","create","forEach","item","formatedPositions","rows","isNil","filteredData","filter","unrealPnL_total","notional_total","unsettlementPnL_total","formatted","map","unRealizedPrice","mark_price","price","info","notional","position_qty","unrealPnl","unrealizedPnL","qty","openPrice","average_open_price","markPrice","imr","IMR","maxLeverage","max_leverage","baseIMR","IMR_Factor","imr_factor","positionNotional","ordersNotional","IMR_factor_power","unrealPnlROI","unrealizedPnLROI","positionQty","unsettlementPnL","costPosition","cost_position","sumUnitaryFunding","lastSumUnitaryFunding","last_sum_unitary_funding","add","mm","unsettlement_pnl","unrealized_pnl","unrealized_pnl_ROI","unrealPnL","toNumber","unsettledPnL","totalCollateral","totalValue","totalUnrealizedROI","unsettlemnedPnL","USDC_holding","nonUSDC","USDCHolding","nonUSDCHolding","totalUnsettlementPnL","totalUnrealizedPnL","positionsRows","total","MMR","baseMMR","IMRFactor","maintenanceMargin","mmr","est_liq_price","liqPrice","positionInfoGetter","aggregated","loading","refresh","pathOr_unsettledPnLPathOr"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -5,37 +5,37 @@ import { useAccount } from "../useAccount";
|
|
|
5
5
|
import { unstable_serialize } from "swr/infinite";
|
|
6
6
|
import { useEventEmitter } from "../useEventEmitter";
|
|
7
7
|
import { updateOrdersHandler } from "../utils/swr";
|
|
8
|
-
export const usePrivateDataObserver = (options)
|
|
8
|
+
export const usePrivateDataObserver = (options)=>{
|
|
9
9
|
const ws = useWS();
|
|
10
10
|
// const { mutate } = useSWRConfig();
|
|
11
11
|
const ee = useEventEmitter();
|
|
12
12
|
const { state } = useAccount();
|
|
13
13
|
// TODO: remove this when the WS service provides the correct data
|
|
14
14
|
const algoOrderCacheQuneue = useRef([]);
|
|
15
|
-
const updateOrders = (data, isAlgoOrder)
|
|
15
|
+
const updateOrders = (data, isAlgoOrder)=>{
|
|
16
16
|
const map = options.getKeysMap("orders");
|
|
17
17
|
// console.log("$$$$$$$$$$$$", data, algoOrderCacheQuneue.current);
|
|
18
18
|
if (isAlgoOrder) {
|
|
19
19
|
/// TODO: remove this when the WS service provides the correct data
|
|
20
20
|
if (algoOrderCacheQuneue.current.length) {
|
|
21
|
-
const index = algoOrderCacheQuneue.current.findIndex((item)
|
|
21
|
+
const index = algoOrderCacheQuneue.current.findIndex((item)=>item.order_id === data.algoOrderId);
|
|
22
22
|
if (index > -1) {
|
|
23
23
|
data = {
|
|
24
24
|
...data,
|
|
25
|
-
...algoOrderCacheQuneue.current[index]
|
|
25
|
+
...algoOrderCacheQuneue.current[index]
|
|
26
26
|
};
|
|
27
27
|
algoOrderCacheQuneue.current.splice(index, 1);
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
|
-
map.forEach((getKey, key)
|
|
32
|
-
mutate(unstable_serialize((index, prevData)
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
map.forEach((getKey, key)=>{
|
|
32
|
+
mutate(unstable_serialize((index, prevData)=>[
|
|
33
|
+
getKey(index, prevData),
|
|
34
|
+
state.accountId
|
|
35
|
+
]), (prevData)=>{
|
|
36
36
|
return updateOrdersHandler(key, data, prevData);
|
|
37
37
|
}, {
|
|
38
|
-
revalidate: false
|
|
38
|
+
revalidate: false
|
|
39
39
|
});
|
|
40
40
|
});
|
|
41
41
|
// emit events;
|
|
@@ -45,59 +45,62 @@ export const usePrivateDataObserver = (options) => {
|
|
|
45
45
|
// });
|
|
46
46
|
ee.emit("orders:changed", {
|
|
47
47
|
...data,
|
|
48
|
-
status: data.status || data.algoStatus
|
|
48
|
+
status: data.status || data.algoStatus
|
|
49
49
|
});
|
|
50
50
|
};
|
|
51
51
|
// orders
|
|
52
|
-
useEffect(()
|
|
53
|
-
if (!state.accountId)
|
|
54
|
-
return;
|
|
52
|
+
useEffect(()=>{
|
|
53
|
+
if (!state.accountId) return;
|
|
55
54
|
const unsubscribe = ws.privateSubscribe("executionreport", {
|
|
56
|
-
onMessage: (data)
|
|
55
|
+
onMessage: (data)=>{
|
|
57
56
|
updateOrders(data, false);
|
|
58
|
-
}
|
|
57
|
+
}
|
|
59
58
|
});
|
|
60
|
-
return ()
|
|
61
|
-
}, [
|
|
59
|
+
return ()=>unsubscribe?.();
|
|
60
|
+
}, [
|
|
61
|
+
state.accountId
|
|
62
|
+
]);
|
|
62
63
|
// algo orders
|
|
63
|
-
useEffect(()
|
|
64
|
-
if (!state.accountId)
|
|
65
|
-
return;
|
|
64
|
+
useEffect(()=>{
|
|
65
|
+
if (!state.accountId) return;
|
|
66
66
|
const unsubscribe = ws.privateSubscribe("algoexecutionreport", {
|
|
67
|
-
onMessage: (data)
|
|
68
|
-
setTimeout(()
|
|
67
|
+
onMessage: (data)=>{
|
|
68
|
+
setTimeout(()=>{
|
|
69
69
|
if (Array.isArray(data)) {
|
|
70
|
-
data.forEach((item)
|
|
70
|
+
data.forEach((item)=>{
|
|
71
71
|
updateOrders(item, true);
|
|
72
|
-
|
|
72
|
+
// ee.emit("orders:changed", { ...item, status: item.algoStatus });
|
|
73
73
|
});
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
74
|
+
} else {
|
|
76
75
|
updateOrders(data, true);
|
|
77
|
-
|
|
76
|
+
// ee.emit("orders:changed", { ...data, status: data.algoStatus });
|
|
78
77
|
}
|
|
79
78
|
}, 100);
|
|
80
|
-
}
|
|
79
|
+
}
|
|
81
80
|
});
|
|
82
|
-
return ()
|
|
83
|
-
}, [
|
|
81
|
+
return ()=>unsubscribe?.();
|
|
82
|
+
}, [
|
|
83
|
+
state.accountId
|
|
84
|
+
]);
|
|
84
85
|
// positions
|
|
85
|
-
useEffect(()
|
|
86
|
-
if (!state.accountId)
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
useEffect(()=>{
|
|
87
|
+
if (!state.accountId) return;
|
|
88
|
+
const key = [
|
|
89
|
+
"/v1/positions",
|
|
90
|
+
state.accountId
|
|
91
|
+
];
|
|
89
92
|
const unsubscribe = ws.privateSubscribe("position", {
|
|
90
|
-
onMessage: (data)
|
|
93
|
+
onMessage: (data)=>{
|
|
91
94
|
const { positions: nextPostions } = data;
|
|
92
95
|
// console.log("ws----- positions data-----", data);
|
|
93
96
|
// updatePositions();
|
|
94
|
-
mutate(key, (prevPositions)
|
|
97
|
+
mutate(key, (prevPositions)=>{
|
|
95
98
|
// return nextPostions;
|
|
96
99
|
if (!!prevPositions) {
|
|
97
100
|
return {
|
|
98
101
|
...prevPositions,
|
|
99
|
-
rows: prevPositions.rows.map((row)
|
|
100
|
-
const item = nextPostions.find((item)
|
|
102
|
+
rows: prevPositions.rows.map((row)=>{
|
|
103
|
+
const item = nextPostions.find((item)=>item.symbol === row.symbol);
|
|
101
104
|
if (item) {
|
|
102
105
|
return {
|
|
103
106
|
symbol: item.symbol,
|
|
@@ -117,30 +120,34 @@ export const usePrivateDataObserver = (options) => {
|
|
|
117
120
|
IMR_withdraw_orders: item.imrwithOrders,
|
|
118
121
|
MMR_with_orders: item.mmrwithOrders,
|
|
119
122
|
pnl_24_h: item.pnl24H,
|
|
120
|
-
fee_24_h: item.fee24H
|
|
123
|
+
fee_24_h: item.fee24H
|
|
121
124
|
};
|
|
122
125
|
}
|
|
123
126
|
return row;
|
|
124
|
-
})
|
|
127
|
+
})
|
|
125
128
|
};
|
|
126
129
|
}
|
|
127
130
|
}, {
|
|
128
|
-
revalidate: false
|
|
131
|
+
revalidate: false
|
|
129
132
|
});
|
|
130
|
-
}
|
|
133
|
+
}
|
|
131
134
|
});
|
|
132
|
-
return ()
|
|
135
|
+
return ()=>{
|
|
133
136
|
unsubscribe?.();
|
|
134
137
|
};
|
|
135
|
-
}, [
|
|
138
|
+
}, [
|
|
139
|
+
state.accountId
|
|
140
|
+
]);
|
|
136
141
|
// cache algo orders
|
|
137
|
-
useEffect(()
|
|
138
|
-
const handler = (data)
|
|
142
|
+
useEffect(()=>{
|
|
143
|
+
const handler = (data)=>{
|
|
139
144
|
algoOrderCacheQuneue.current.push(data);
|
|
140
145
|
};
|
|
141
146
|
ee.on("algoOrder:cache", handler);
|
|
142
|
-
return ()
|
|
147
|
+
return ()=>{
|
|
143
148
|
ee.off("algoOrder:cache", handler);
|
|
144
149
|
};
|
|
145
150
|
}, []);
|
|
146
151
|
};
|
|
152
|
+
|
|
153
|
+
//# sourceMappingURL=usePrivateDataObserver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/orderly/usePrivateDataObserver.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport { useWS } from \"../useWS\";\nimport { mutate } from \"swr\";\nimport { WSMessage, API } from \"@orderly.network/types\";\nimport { useAccount } from \"../useAccount\";\nimport { unstable_serialize } from \"swr/infinite\";\nimport { useDebouncedCallback } from \"use-debounce\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { getKeyFunction } from \"../dataProvider\";\nimport { parseJSON } from \"../utils/json\";\nimport { updateOrdersHandler } from \"../utils/swr\";\n\nexport const usePrivateDataObserver = (options: {\n // onUpdateOrders: (data: any) => void;\n getKeysMap: (type: string) => Map<string, getKeyFunction>;\n}) => {\n const ws = useWS();\n // const { mutate } = useSWRConfig();\n const ee = useEventEmitter();\n const { state } = useAccount();\n\n // TODO: remove this when the WS service provides the correct data\n const algoOrderCacheQuneue = useRef<API.AlgoOrder[]>([]);\n\n const updateOrders = (\n data: WSMessage.AlgoOrder | WSMessage.Order,\n isAlgoOrder: boolean\n ) => {\n const map = options.getKeysMap(\"orders\");\n\n // console.log(\"$$$$$$$$$$$$\", data, algoOrderCacheQuneue.current);\n\n if (isAlgoOrder) {\n /// TODO: remove this when the WS service provides the correct data\n if (algoOrderCacheQuneue.current.length) {\n const index = algoOrderCacheQuneue.current.findIndex(\n (item: any) =>\n item.order_id === (data as WSMessage.AlgoOrder).algoOrderId\n );\n\n if (index > -1) {\n data = {\n ...data,\n ...algoOrderCacheQuneue.current[index],\n };\n algoOrderCacheQuneue.current.splice(index, 1);\n }\n }\n }\n\n map.forEach((getKey, key) => {\n mutate(\n unstable_serialize((index, prevData) => [\n getKey(index, prevData),\n state.accountId,\n ]),\n (prevData?: any[]) => {\n return updateOrdersHandler(key, data, prevData);\n },\n {\n revalidate: false,\n }\n );\n });\n\n // emit events;\n // ee.emit(\"orders:changed\", {\n // ...data,\n // status: data.status || (data as WSMessage.AlgoOrder).algoStatus,\n // });\n\n ee.emit(\"orders:changed\", {\n ...data,\n status: data.status || (data as WSMessage.AlgoOrder).algoStatus,\n });\n };\n\n // orders\n useEffect(() => {\n if (!state.accountId) return;\n const unsubscribe = ws.privateSubscribe(\"executionreport\", {\n onMessage: (data: any) => {\n updateOrders(data, false);\n },\n });\n\n return () => unsubscribe?.();\n }, [state.accountId]);\n\n // algo orders\n useEffect(() => {\n if (!state.accountId) return;\n const unsubscribe = ws.privateSubscribe(\"algoexecutionreport\", {\n onMessage: (data: any) => {\n setTimeout(() => {\n if (Array.isArray(data)) {\n data.forEach((item) => {\n updateOrders(item, true);\n\n // ee.emit(\"orders:changed\", { ...item, status: item.algoStatus });\n });\n } else {\n updateOrders(data, true);\n // ee.emit(\"orders:changed\", { ...data, status: data.algoStatus });\n }\n }, 100);\n },\n });\n\n return () => unsubscribe?.();\n }, [state.accountId]);\n\n // positions\n useEffect(() => {\n if (!state.accountId) return;\n const key = [\"/v1/positions\", state.accountId];\n const unsubscribe = ws.privateSubscribe(\"position\", {\n onMessage: (data: { positions: WSMessage.Position[] }) => {\n const { positions: nextPostions } = data;\n\n // console.log(\"ws----- positions data-----\", data);\n\n // updatePositions();\n\n mutate(\n key,\n (prevPositions: any) => {\n // return nextPostions;\n if (!!prevPositions) {\n return {\n ...prevPositions,\n rows: prevPositions.rows.map((row: any) => {\n const item = nextPostions.find(\n (item) => item.symbol === row.symbol\n );\n if (item) {\n return {\n symbol: item.symbol,\n position_qty: item.positionQty,\n cost_position: item.costPosition,\n last_sum_unitary_funding: item.lastSumUnitaryFunding,\n pending_long_qty: item.pendingLongQty,\n pending_short_qty: item.pendingShortQty,\n settle_price: item.settlePrice,\n average_open_price: item.averageOpenPrice,\n unsettled_pnl: item.unsettledPnl,\n mark_price: item.markPrice,\n est_liq_price: item.estLiqPrice,\n timestamp: Date.now(),\n imr: item.imr,\n mmr: item.mmr,\n IMR_withdraw_orders: item.imrwithOrders,\n MMR_with_orders: item.mmrwithOrders,\n pnl_24_h: item.pnl24H,\n fee_24_h: item.fee24H,\n };\n }\n\n return row;\n }),\n };\n }\n },\n {\n revalidate: false,\n }\n );\n },\n });\n return () => {\n unsubscribe?.();\n };\n }, [state.accountId]);\n\n // cache algo orders\n useEffect(() => {\n const handler = (data: API.AlgoOrder) => {\n algoOrderCacheQuneue.current.push(data);\n };\n\n ee.on(\"algoOrder:cache\", handler);\n\n return () => {\n ee.off(\"algoOrder:cache\", handler);\n };\n }, []);\n};\n"],"names":["useEffect","useRef","useWS","mutate","useAccount","unstable_serialize","useEventEmitter","updateOrdersHandler","usePrivateDataObserver","options","ws","ee","state","algoOrderCacheQuneue","updateOrders","data","isAlgoOrder","map","getKeysMap","current","length","index","findIndex","item","order_id","algoOrderId","splice","forEach","getKey","key","prevData","accountId","revalidate","emit","status","algoStatus","unsubscribe","privateSubscribe","onMessage","setTimeout","Array","isArray","positions","nextPostions","prevPositions","rows","row","find","symbol","position_qty","positionQty","cost_position","costPosition","last_sum_unitary_funding","lastSumUnitaryFunding","pending_long_qty","pendingLongQty","pending_short_qty","pendingShortQty","settle_price","settlePrice","average_open_price","averageOpenPrice","unsettled_pnl","unsettledPnl","mark_price","markPrice","est_liq_price","estLiqPrice","timestamp","Date","now","imr","mmr","IMR_withdraw_orders","imrwithOrders","MMR_with_orders","mmrwithOrders","pnl_24_h","pnl24H","fee_24_h","fee24H","handler","push","on","off"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
import useSWRSubscription from "swr/subscription";
|
|
2
2
|
import { useWS } from "../useWS";
|
|
3
|
-
export const useSettleSubscription = (options)
|
|
3
|
+
export const useSettleSubscription = (options)=>{
|
|
4
4
|
const ws = useWS();
|
|
5
|
-
return useSWRSubscription("settle", (_, { next })
|
|
5
|
+
return useSWRSubscription("settle", (_, { next })=>{
|
|
6
6
|
const unsubscribe = ws.privateSubscribe({
|
|
7
7
|
id: "settle",
|
|
8
8
|
event: "subscribe",
|
|
9
9
|
topic: "settle",
|
|
10
|
-
ts: Date.now()
|
|
10
|
+
ts: Date.now()
|
|
11
11
|
}, {
|
|
12
|
-
onMessage: (data)
|
|
12
|
+
onMessage: (data)=>{
|
|
13
13
|
//
|
|
14
14
|
options?.onMessage?.(data);
|
|
15
15
|
next(data);
|
|
16
|
-
}
|
|
16
|
+
}
|
|
17
17
|
});
|
|
18
|
-
return ()
|
|
18
|
+
return ()=>unsubscribe();
|
|
19
19
|
});
|
|
20
20
|
};
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=useSettleSubscription.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/orderly/useSettleSubscription.ts"],"sourcesContent":["import useSWRSubscription from \"swr/subscription\";\nimport { useWS } from \"../useWS\";\n\nexport const useSettleSubscription = (options?: {\n onMessage?: (data: any) => void;\n}) => {\n const ws = useWS();\n\n return useSWRSubscription(\"settle\", (_, { next }) => {\n const unsubscribe = ws.privateSubscribe(\n {\n id: \"settle\",\n event: \"subscribe\",\n topic: \"settle\",\n ts: Date.now(),\n },\n {\n onMessage: (data: any) => {\n //\n options?.onMessage?.(data);\n next(data);\n },\n }\n );\n\n return () => unsubscribe();\n });\n};\n"],"names":["useSWRSubscription","useWS","useSettleSubscription","options","ws","_","next","unsubscribe","privateSubscribe","id","event","topic","ts","Date","now","onMessage","data"],"rangeMappings":";;;;;;;;;;;;;;;;;;;","mappings":"AAAA,OAAOA,wBAAwB,mBAAmB;AAClD,SAASC,KAAK,QAAQ,WAAW;AAEjC,OAAO,MAAMC,wBAAwB,CAACC;IAGpC,MAAMC,KAAKH;IAEX,OAAOD,mBAAmB,UAAU,CAACK,GAAG,EAAEC,IAAI,EAAE;QAC9C,MAAMC,cAAcH,GAAGI,gBAAgB,CACrC;YACEC,IAAI;YACJC,OAAO;YACPC,OAAO;YACPC,IAAIC,KAAKC,GAAG;QACd,GACA;YACEC,WAAW,CAACC;gBACV,EAAE;gBACFb,SAASY,YAAYC;gBACrBV,KAAKU;YACP;QACF;QAGF,OAAO,IAAMT;IACf;AACF,EAAE"}
|
|
@@ -8,8 +8,7 @@ import { useMemo } from "react";
|
|
|
8
8
|
* @param symbol - The symbol to get the price range for
|
|
9
9
|
* @param price - Optional parameter to set the price
|
|
10
10
|
* @returns PriceRange | undefined - Returns the PriceRange representing the price range or undefined
|
|
11
|
-
*/
|
|
12
|
-
export const useSymbolPriceRange = (symbol, side, price) => {
|
|
11
|
+
*/ export const useSymbolPriceRange = (symbol, side, price)=>{
|
|
13
12
|
const config = useSymbolsInfo();
|
|
14
13
|
const priceRange = config?.[symbol]("price_range");
|
|
15
14
|
const priceScrope = config?.[symbol]("price_scope");
|
|
@@ -17,7 +16,7 @@ export const useSymbolPriceRange = (symbol, side, price) => {
|
|
|
17
16
|
const markPrice = price || prices?.[symbol];
|
|
18
17
|
/// max mark_price_i * (1+price_range)
|
|
19
18
|
/// min mark_price_i * (1-price_range)
|
|
20
|
-
const range = useMemo(()
|
|
19
|
+
const range = useMemo(()=>{
|
|
21
20
|
if (config === undefined || markPrice === undefined) {
|
|
22
21
|
return undefined;
|
|
23
22
|
}
|
|
@@ -26,14 +25,21 @@ export const useSymbolPriceRange = (symbol, side, price) => {
|
|
|
26
25
|
}
|
|
27
26
|
if (side === "BUY") {
|
|
28
27
|
return {
|
|
29
|
-
max: new Decimal(markPrice).mul(
|
|
30
|
-
min: new Decimal(markPrice).mul(
|
|
28
|
+
max: new Decimal(markPrice).mul(1 + priceRange).toNumber(),
|
|
29
|
+
min: new Decimal(markPrice).mul(1 - priceScrope).toNumber()
|
|
31
30
|
};
|
|
32
31
|
}
|
|
33
32
|
return {
|
|
34
|
-
max: new Decimal(markPrice).mul(
|
|
35
|
-
min: new Decimal(markPrice).mul(
|
|
33
|
+
max: new Decimal(markPrice).mul(1 + priceScrope).toNumber(),
|
|
34
|
+
min: new Decimal(markPrice).mul(1 - priceRange).toNumber()
|
|
36
35
|
};
|
|
37
|
-
}, [
|
|
36
|
+
}, [
|
|
37
|
+
symbol,
|
|
38
|
+
side,
|
|
39
|
+
priceRange,
|
|
40
|
+
markPrice
|
|
41
|
+
]);
|
|
38
42
|
return range;
|
|
39
43
|
};
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=useSymbolPriceRange.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/orderly/useSymbolPriceRange.ts"],"sourcesContent":["import { Decimal } from \"@orderly.network/utils\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { useEffect, useMemo, useState } from \"react\";\n\n// Define the PriceRange type to represent a range of prices\nexport type PriceRange = {\n min: number,\n max: number,\n};\n\n/**\n * Get the price range for the specified symbol with an optional price\n *\n * @param symbol - The symbol to get the price range for\n * @param price - Optional parameter to set the price\n * @returns PriceRange | undefined - Returns the PriceRange representing the price range or undefined\n */\nexport const useSymbolPriceRange = (symbol: string, side: \"BUY\" | \"SELL\", price?: number): PriceRange | undefined => {\n const config = useSymbolsInfo();\n const priceRange = config?.[symbol](\"price_range\");\n const priceScrope = config?.[symbol](\"price_scope\");\n const { data: prices } = useMarkPricesStream();\n const markPrice = price || prices?.[symbol];\n\n /// max mark_price_i * (1+price_range)\n /// min mark_price_i * (1-price_range)\n\n const range = useMemo(() => {\n if (config === undefined || markPrice === undefined) {\n return undefined;\n }\n\n if (priceRange === undefined || Number.isNaN(markPrice)) {\n return undefined;\n }\n\n if (side === \"BUY\") {\n return {\n max: new Decimal(markPrice).mul((1 + priceRange)).toNumber(),\n min: new Decimal(markPrice).mul((1 - priceScrope)).toNumber(),\n };\n }\n\n return {\n max: new Decimal(markPrice).mul((1 + priceScrope)).toNumber(),\n min: new Decimal(markPrice).mul((1 - priceRange)).toNumber(),\n };\n }, [symbol, side, priceRange, markPrice]);\n\n return range;\n}"],"names":["Decimal","useSymbolsInfo","useMarkPricesStream","useMemo","useSymbolPriceRange","symbol","side","price","config","priceRange","priceScrope","data","prices","markPrice","range","undefined","Number","isNaN","max","mul","toNumber","min"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,OAAO,QAAQ,yBAAyB;AACjD,SAASC,cAAc,QAAQ,mBAAmB;AAClD,SAASC,mBAAmB,QAAQ,wBAAwB;AAC5D,SAAoBC,OAAO,QAAkB,QAAQ;AAQrD;;;;;;CAMC,GACD,OAAO,MAAMC,sBAAsB,CAACC,QAAgBC,MAAsBC;IACtE,MAAMC,SAASP;IACf,MAAMQ,aAAaD,QAAQ,CAACH,OAAO,CAAC;IACpC,MAAMK,cAAcF,QAAQ,CAACH,OAAO,CAAC;IACrC,MAAM,EAAEM,MAAMC,MAAM,EAAE,GAAGV;IACzB,MAAMW,YAAYN,SAASK,QAAQ,CAACP,OAAO;IAE3C,sCAAsC;IACtC,sCAAsC;IAEtC,MAAMS,QAAQX,QAAQ;QAClB,IAAIK,WAAWO,aAAaF,cAAcE,WAAW;YACjD,OAAOA;QACX;QAEA,IAAIN,eAAeM,aAAaC,OAAOC,KAAK,CAACJ,YAAY;YACrD,OAAOE;QACX;QAEA,IAAIT,SAAS,OAAO;YAChB,OAAO;gBACHY,KAAK,IAAIlB,QAAQa,WAAWM,GAAG,CAAE,IAAIV,YAAaW,QAAQ;gBAC1DC,KAAK,IAAIrB,QAAQa,WAAWM,GAAG,CAAE,IAAIT,aAAcU,QAAQ;YAC/D;QACJ;QAEA,OAAO;YACHF,KAAK,IAAIlB,QAAQa,WAAWM,GAAG,CAAE,IAAIT,aAAcU,QAAQ;YAC3DC,KAAK,IAAIrB,QAAQa,WAAWM,GAAG,CAAE,IAAIV,YAAaW,QAAQ;QAC9D;IACJ,GAAG;QAACf;QAAQC;QAAMG;QAAYI;KAAU;IAExC,OAAOC;AACX,EAAC"}
|