@orderly.network/hooks 1.3.0-alpha.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/orderly/useOrderbookStream.d.ts.map +1 -1
- package/esm/orderly/useOrderbookStream.js +13 -6
- package/esm/orderly/useOrderbookStream.js.map +1 -1
- package/esm/version.d.ts +1 -1
- package/esm/version.d.ts.map +1 -1
- package/esm/version.js +2 -2
- package/esm/version.js.map +1 -1
- package/lib/orderly/useOrderbookStream.d.ts.map +1 -1
- package/lib/orderly/useOrderbookStream.js +12 -5
- package/lib/orderly/useOrderbookStream.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.d.ts.map +1 -1
- package/lib/version.js +2 -2
- package/lib/version.js.map +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOrderbookStream.d.ts","sourceRoot":"","sources":["../../src/orderly/useOrderbookStream.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;AAErC,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,IAAI,EAAE,aAAa,EAAE,CAAC;CACzB,CAAC;AAyFF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,UACjB,MAAM,GAAG,SAAS,SAClB,MAAM,WACJ,OAAO,QACV,aAAa,KACpB,aAyDF,CAAC;AAgCF,eAAO,MAAM,cAAc,SAAU,aAAa,UAAU,aAAa;;;CAWxE,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC3B,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4IAA4I;IAC5I,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAIF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,WACnB,MAAM,YACL,aAAa,YACZ,gBAAgB;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"useOrderbookStream.d.ts","sourceRoot":"","sources":["../../src/orderly/useOrderbookStream.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;AAErC,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,IAAI,EAAE,aAAa,EAAE,CAAC;CACzB,CAAC;AAyFF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,UACjB,MAAM,GAAG,SAAS,SAClB,MAAM,WACJ,OAAO,QACV,aAAa,KACpB,aAyDF,CAAC;AAgCF,eAAO,MAAM,cAAc,SAAU,aAAa,UAAU,aAAa;;;CAWxE,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC3B,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4IAA4I;IAC5I,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAIF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,WACnB,MAAM,YACL,aAAa,YACZ,gBAAgB;;;;;;;;;;;2BAqHgB,MAAM;;;;;;;;;IAmDnD,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
|
|
@@ -4,7 +4,7 @@ import { useMarkPrice } from "./useMarkPrice";
|
|
|
4
4
|
import { useWS } from "../useWS";
|
|
5
5
|
import { useEventEmitter } from "../useEventEmitter";
|
|
6
6
|
import { useSymbolsInfo } from "./useSymbolsInfo";
|
|
7
|
-
import { Decimal } from "@orderly.network/utils";
|
|
7
|
+
import { Decimal, removeTrailingZeros } from "@orderly.network/utils";
|
|
8
8
|
import { min } from "ramda";
|
|
9
9
|
import { SDKError } from "@orderly.network/types";
|
|
10
10
|
import orderbooksService from './orderbook.service';
|
|
@@ -41,7 +41,7 @@ const reduceItems = (depth, level, data, asks = false)=>{
|
|
|
41
41
|
const priceStr = price.toString();
|
|
42
42
|
const index = priceStr.indexOf(".");
|
|
43
43
|
const decimal = priceStr.slice(index + 1);
|
|
44
|
-
const decimalDepth = depth.toString().slice(2).length;
|
|
44
|
+
const decimalDepth = removeTrailingZeros(depth).toString().slice(2).length;
|
|
45
45
|
const decimalStr = decimal.slice(0, min(decimal.length, decimalDepth));
|
|
46
46
|
priceKey = new Decimal(priceStr.slice(0, index) + "." + decimalStr).toNumber();
|
|
47
47
|
}
|
|
@@ -204,11 +204,18 @@ const INIT_DATA = {
|
|
|
204
204
|
const prevMiddlePrice = useRef(0);
|
|
205
205
|
const depths = useMemo(()=>{
|
|
206
206
|
const tick = config("quote_tick");
|
|
207
|
+
if (typeof tick === 'undefined') return [];
|
|
208
|
+
try {
|
|
209
|
+
const base = new Decimal(tick);
|
|
210
|
+
return [
|
|
211
|
+
base.toNumber(),
|
|
212
|
+
base.mul(10).toNumber(),
|
|
213
|
+
base.mul(100).toNumber(),
|
|
214
|
+
base.mul(1000).toNumber()
|
|
215
|
+
];
|
|
216
|
+
} catch (e) {}
|
|
207
217
|
return [
|
|
208
|
-
tick
|
|
209
|
-
tick * 10,
|
|
210
|
-
tick * 100,
|
|
211
|
-
tick * 1000
|
|
218
|
+
tick
|
|
212
219
|
];
|
|
213
220
|
}, [
|
|
214
221
|
config("quote_tick")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/orderly/useOrderbookStream.ts"],"sourcesContent":["import {useCallback, useEffect, useMemo, useRef, useState} from \"react\";\nimport {useTickerStream} from \"./useTickerStream\";\nimport {useMarkPrice} from \"./useMarkPrice\";\nimport {useWS} from \"../useWS\";\nimport {useEventEmitter} from \"../useEventEmitter\";\nimport {useSymbolsInfo} from \"./useSymbolsInfo\";\nimport {Decimal} from \"@orderly.network/utils\";\nimport {max, min} from \"ramda\";\nimport {SDKError} from \"@orderly.network/types\";\nimport orderbooksService from './orderbook.service';\n\nexport type OrderBookItem = number[];\n\nexport type OrderbookData = {\n asks: OrderBookItem[];\n bids: OrderBookItem[];\n};\n\nconst paddingFn = (len: number) =>\n Array(len).fill([Number.NaN, Number.NaN, Number.NaN, Number.NaN] as OrderBookItem);\n\nconst asksSortFn = (a: OrderBookItem, b: OrderBookItem) => a[0] - b[0];\n\nconst bidsSortFn = (a: OrderBookItem, b: OrderBookItem) => b[0] - a[0];\n\n// const commonSortFn = (a: OrderBookItem, b: OrderBookItem) => b[0] - a[0];\n\nconst reduceItems = (\n depth: number | undefined,\n level: number,\n data: OrderBookItem[],\n asks = false\n) => {\n if (!Array.isArray(data) || data.length === 0) {\n return [];\n }\n let newData = [...data];\n const result: OrderBookItem[] = [];\n\n //\n\n if (typeof depth !== \"undefined\") {\n const prices = new Map<number, number[]>();\n for (let i = 0; i < data.length; i++) {\n const [price, quantity] = data[i];\n if (isNaN(price) || isNaN(quantity)) continue;\n let priceKey;\n\n if (asks) {\n priceKey = new Decimal(Math.ceil(price / depth)).mul(depth).toNumber();\n } else {\n priceKey = new Decimal(Math.floor(price / depth)).mul(depth).toNumber();\n }\n\n if (depth < 1 && depth > 0 && priceKey.toString().indexOf(\".\") !== -1) {\n const priceStr = price.toString();\n const index = priceStr.indexOf(\".\");\n const decimal = priceStr.slice(index + 1);\n const decimalDepth = depth.toString().slice(2).length;\n const decimalStr = decimal.slice(0, min(decimal.length, decimalDepth));\n priceKey = new Decimal(\n priceStr.slice(0, index) + \".\" + decimalStr\n ).toNumber();\n }\n\n // console.log(`reduce items price: ${price}, priceKey: ${priceKey}, depth: ${depth}, resetPriceKey: ${price.toString === priceKey.toString}`);\n // console.log(`ask: ${asks} reduce items price: ${priceKey}`);\n\n if (prices.has(priceKey)) {\n const item = prices.get(priceKey)!;\n const itemPrice = new Decimal(item[1]).add(quantity).toNumber();\n\n // prices.push([price, quantity]);\n prices.set(priceKey, [priceKey, itemPrice]);\n } else {\n prices.set(priceKey, [priceKey, quantity]);\n }\n }\n\n newData = Array.from(prices.values());\n }\n\n for (let i = 0; i < newData.length; i++) {\n const [price, quantity] = newData[i];\n if (isNaN(price) || isNaN(quantity)) continue;\n\n const newQuantity = new Decimal(quantity)\n .add(result.length > 0 ? result[result.length - 1][2] : 0)\n .toNumber();\n\n const newAmount = new Decimal(quantity * price)\n .add(result.length > 0 ? result[result.length - 1][3] : 0)\n .toNumber();\n\n result.push([price, quantity, newQuantity, newAmount]);\n // if the total is greater than the level, break\n // TODO:\n // if (i + 1 >= level) {\n // break;\n // }\n }\n\n return result;\n};\n\n/**\n * @name reduceOrderbook\n * @param depth\n * @param level\n * @param data\n */\nexport const reduceOrderbook = (\n depth: number | undefined,\n level: number,\n padding: boolean,\n data: OrderbookData,\n): OrderbookData => {\n let asks = reduceItems(depth, level, data.asks, true);\n\n let bids = reduceItems(depth, level, data.bids);\n\n /// not empty and asks.price <= bids.price\n if (asks.length !== 0 && bids.length !== 0 && asks[0][0] <= bids[0][0]) {\n if (asks.length === 1) {\n const [price, qty, newQuantity, newAmount] = asks[0];\n asks.shift();\n asks.push([price + (depth === undefined ? 0 : depth), qty, newQuantity, newAmount]);\n } else {\n const [bidPrice] = bids[0];\n while (asks.length > 0) {\n const [askPrice, askQty, newQuantity, newAmount] = asks[0];\n\n\n if (askPrice <= bidPrice) {\n // console.log(\"xxxxxxxxxxx reset ask list begin\", [...asks], { ...asks[0] });\n asks.shift();\n let logStr = \"\";\n for (let index = 0; index < asks.length; index++) {\n if (index === 0) {\n const quantity = asks[index][1] + askQty;\n asks[index][1] = quantity;\n asks[index][2] = quantity;\n // asks[index][3] += newAmount;\n // FIXME: fix this code later\n asks[index][3] = Math.ceil(quantity) * asks[index][0];\n } else {\n // asks[index][3] += newAmount;\n // FIXME: fix this code later\n asks[index][3] = asks[index][0] * asks[index][1] + asks[index - 1][3];\n }\n logStr += `index: ${index} ${asks[index]}\\n`;\n }\n // console.log(\"xxxxxxxxxxx reset ask list end\", logStr);\n } else {\n break;\n }\n }\n }\n }\n\n asks = asks.reverse();\n\n if (padding) {\n asks =\n asks.length < level ? paddingFn(level - asks.length).concat(asks) : asks;\n bids =\n bids.length < level ? bids.concat(paddingFn(level - bids.length)) : bids;\n }\n\n return {\n asks: asks,\n bids: bids,\n };\n};\n\nconst mergeItems = (data: OrderBookItem[], update: OrderBookItem[]) => {\n // let index = -1;\n if (data.length === 0) return update;\n\n data = data.filter(([price]) => !isNaN(price));\n\n while (update.length > 0) {\n const item = update.shift();\n //\n if (item) {\n const [price, quantity] = item;\n\n const index = data.findIndex(([p], index) => p === price);\n //\n if (index === -1) {\n if (quantity === 0) continue;\n data.push(item);\n } else {\n if (quantity === 0) {\n data.splice(index, 1);\n } else {\n data[index] = item;\n }\n }\n }\n }\n\n return data;\n};\n\nexport const mergeOrderbook = (data: OrderbookData, update: OrderbookData) => {\n let asks = [...data.asks];\n let bids = [...data.bids];\n\n asks = mergeItems(asks, update.asks).sort(asksSortFn);\n bids = mergeItems(bids, update.bids).sort(bidsSortFn);\n\n return {\n asks: asks,\n bids: bids,\n };\n};\n\n/**\n * Configuration for the Order Book\n */\nexport type OrderbookOptions = {\n /** Indicates the number of data entries to return for ask/bid, default is 10 */\n level?: number;\n /** Whether to fill in when the actual data entries are less than the level. If filled, it will add [nan, nan, nan, nan]. Default is true */\n padding?: boolean;\n};\n\nconst INIT_DATA = {asks: [], bids: []};\n\n/**\n * @name useOrderbookStream\n * @description React hook that returns the current orderbook for a given market\n */\nexport const useOrderbookStream = (\n symbol: string,\n initial: OrderbookData = INIT_DATA,\n options?: OrderbookOptions\n) => {\n if (!symbol) {\n throw new SDKError(\"useOrderbookStream requires a symbol\");\n }\n\n const level = options?.level ?? 10;\n const padding = options?.padding ?? true;\n\n const [requestData, setRequestData] = useState<OrderbookData | null>(null);\n const [data, setData] = useState<OrderbookData>(initial);\n const [isLoading, setIsLoading] = useState(true);\n // const [level, setLevel] = useState(() => options?.level ?? 10);\n\n const config = useSymbolsInfo()[symbol];\n\n const [depth, setDepth] = useState<number | undefined>();\n\n // markPrice, lastPrice\n const prevMiddlePrice = useRef<number>(0);\n\n const depths = useMemo(() => {\n const tick = config(\"quote_tick\");\n\n return [tick, tick * 10, tick * 100, tick * 1000];\n }, [config(\"quote_tick\")]);\n\n useEffect(() => {\n setDepth(config(\"quote_tick\"));\n }, [config(\"quote_tick\")]);\n\n const ws = useWS();\n\n const ticker = useTickerStream(symbol);\n\n const eventEmitter = useEventEmitter();\n\n // const orderbookRequest =\n\n useEffect(() => {\n let needRequestFullOrderbook= true;\n setIsLoading(true);\n let orderBookUpdateSub: any;\n let fullOrderBookUpdateSub: any;\n orderBookUpdateSub = ws.subscribe(\n {\n event: \"subscribe\",\n topic: `${symbol}@orderbookupdate`,\n },\n {\n formatter: (message) => message,\n onMessage: (message: any) => {\n const {data: wsData, ts} = message;\n const {asks, bids, prevTs} = wsData;\n orderbooksService.updateOrderbook(symbol, {asks, bids, ts, prevTs}, () => needRequestFullOrderbook = true);\n\n\n const data = orderbooksService.getRawOrderbook(symbol);\n setData({bids: data.bids, asks: data.asks});\n\n }\n }\n )\n\n if ( needRequestFullOrderbook) {\n setIsLoading(true);\n\n fullOrderBookUpdateSub = ws.onceSubscribe(\n {\n event: \"request\",\n id: `${symbol}@orderbook`,\n params: {\n type: \"orderbook\",\n symbol: symbol,\n },\n },\n {\n formatter: (message) => message,\n onMessage: (message: any) => {\n const {symbol, asks, bids, ts} = message.data;\n orderbooksService.setFullOrderbook(symbol, {asks, bids, ts})\n const data = orderbooksService.getRawOrderbook(symbol);\n setData({bids: data.bids, asks: data.asks});\n\n setIsLoading(false);\n },\n }\n )\n needRequestFullOrderbook= false;\n }\n\n return () => {\n // unsubscribe\n orderBookUpdateSub?.();\n fullOrderBookUpdateSub?.();\n orderbooksService.resetOrderBook(symbol);\n setData(INIT_DATA);\n }\n\n }, [symbol]);\n\n // const {data:markPrices} = useMarkPricesStream();\n\n const {data: markPrice} = useMarkPrice(symbol);\n\n\n const onItemClick = useCallback((item: OrderBookItem) => {\n eventEmitter.emit(\"orderbook:item:click\", item);\n }, []);\n\n const onDepthChange = useCallback((depth: number) => {\n //\n setDepth(() => depth);\n }, []);\n\n\n const reducedData = reduceOrderbook(depth, level, padding, {\n asks: [...data.asks],\n bids: [...data.bids],\n });\n\n // emit the asks0 and bids0\n useEffect(() => {\n const updateData = [\n reducedData.asks?.[reducedData.asks.length - 1]?.[0],\n reducedData.bids?.[0]?.[0]\n ];\n eventEmitter.emit(\"orderbook:update\", updateData);\n }, [reducedData.asks?.[reducedData.asks.length - 1]?.[0], reducedData.bids?.[0]?.[0]]);\n\n const middlePrice = useMemo(() => {\n let asksFrist = 0,\n bidsFirst = 0;\n\n if (data.asks.length > 0) {\n asksFrist = reducedData.asks?.[reducedData.asks.length - 1]?.[0];\n }\n\n if (data.bids.length > 0) {\n bidsFirst = data.bids[0][0];\n }\n\n if (isNaN(asksFrist) || isNaN(bidsFirst) || !ticker) return 0;\n\n\n return [asksFrist, bidsFirst, ticker[\"24h_close\"]].sort()[1];\n }, [ticker?.[\"24h_close\"], data]);\n\n useEffect(() => {\n prevMiddlePrice.current = middlePrice;\n }, [middlePrice]);\n\n return [\n {\n asks: reducedData.asks.slice(-level),\n bids: reducedData.bids.slice(0, level),\n markPrice: markPrice,\n middlePrice: [prevMiddlePrice.current, middlePrice],\n },\n {onDepthChange, depth, allDepths: depths, isLoading, onItemClick},\n ];\n};\n\nexport type useOrderbookStreamReturn = ReturnType<typeof useOrderbookStream>;\n"],"names":["useCallback","useEffect","useMemo","useRef","useState","useTickerStream","useMarkPrice","useWS","useEventEmitter","useSymbolsInfo","Decimal","min","SDKError","orderbooksService","paddingFn","len","Array","fill","Number","NaN","asksSortFn","a","b","bidsSortFn","reduceItems","depth","level","data","asks","isArray","length","newData","result","prices","Map","i","price","quantity","isNaN","priceKey","Math","ceil","mul","toNumber","floor","toString","indexOf","priceStr","index","decimal","slice","decimalDepth","decimalStr","has","item","get","itemPrice","add","set","from","values","newQuantity","newAmount","push","reduceOrderbook","padding","bids","qty","shift","undefined","bidPrice","askPrice","askQty","logStr","reverse","concat","mergeItems","update","filter","findIndex","p","splice","mergeOrderbook","sort","INIT_DATA","useOrderbookStream","symbol","initial","options","requestData","setRequestData","setData","isLoading","setIsLoading","config","setDepth","prevMiddlePrice","depths","tick","ws","ticker","eventEmitter","needRequestFullOrderbook","orderBookUpdateSub","fullOrderBookUpdateSub","subscribe","event","topic","formatter","message","onMessage","wsData","ts","prevTs","updateOrderbook","getRawOrderbook","onceSubscribe","id","params","type","setFullOrderbook","resetOrderBook","markPrice","onItemClick","emit","onDepthChange","reducedData","updateData","middlePrice","asksFrist","bidsFirst","current","allDepths"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/orderly/useOrderbookStream.ts"],"sourcesContent":["import {useCallback, useEffect, useMemo, useRef, useState} from \"react\";\nimport {useTickerStream} from \"./useTickerStream\";\nimport {useMarkPrice} from \"./useMarkPrice\";\nimport {useWS} from \"../useWS\";\nimport {useEventEmitter} from \"../useEventEmitter\";\nimport {useSymbolsInfo} from \"./useSymbolsInfo\";\nimport {Decimal, removeTrailingZeros} from \"@orderly.network/utils\";\nimport {max, min} from \"ramda\";\nimport {SDKError} from \"@orderly.network/types\";\nimport orderbooksService from './orderbook.service';\n\nexport type OrderBookItem = number[];\n\nexport type OrderbookData = {\n asks: OrderBookItem[];\n bids: OrderBookItem[];\n};\n\nconst paddingFn = (len: number) =>\n Array(len).fill([Number.NaN, Number.NaN, Number.NaN, Number.NaN] as OrderBookItem);\n\nconst asksSortFn = (a: OrderBookItem, b: OrderBookItem) => a[0] - b[0];\n\nconst bidsSortFn = (a: OrderBookItem, b: OrderBookItem) => b[0] - a[0];\n\n// const commonSortFn = (a: OrderBookItem, b: OrderBookItem) => b[0] - a[0];\n\nconst reduceItems = (\n depth: number | undefined,\n level: number,\n data: OrderBookItem[],\n asks = false\n) => {\n if (!Array.isArray(data) || data.length === 0) {\n return [];\n }\n let newData = [...data];\n const result: OrderBookItem[] = [];\n\n //\n\n if (typeof depth !== \"undefined\") {\n const prices = new Map<number, number[]>();\n for (let i = 0; i < data.length; i++) {\n const [price, quantity] = data[i];\n if (isNaN(price) || isNaN(quantity)) continue;\n let priceKey;\n\n if (asks) {\n priceKey = new Decimal(Math.ceil(price / depth)).mul(depth).toNumber();\n } else {\n priceKey = new Decimal(Math.floor(price / depth)).mul(depth).toNumber();\n }\n\n if (depth < 1 && depth > 0 && priceKey.toString().indexOf(\".\") !== -1) {\n const priceStr = price.toString();\n const index = priceStr.indexOf(\".\");\n const decimal = priceStr.slice(index + 1);\n const decimalDepth = removeTrailingZeros(depth).toString().slice(2).length;\n const decimalStr = decimal.slice(0, min(decimal.length, decimalDepth));\n priceKey = new Decimal(\n priceStr.slice(0, index) + \".\" + decimalStr\n ).toNumber();\n }\n\n // console.log(`reduce items price: ${price}, priceKey: ${priceKey}, depth: ${depth}, resetPriceKey: ${price.toString === priceKey.toString}`);\n // console.log(`ask: ${asks} reduce items price: ${priceKey}`);\n\n if (prices.has(priceKey)) {\n const item = prices.get(priceKey)!;\n const itemPrice = new Decimal(item[1]).add(quantity).toNumber();\n\n // prices.push([price, quantity]);\n prices.set(priceKey, [priceKey, itemPrice]);\n } else {\n prices.set(priceKey, [priceKey, quantity]);\n }\n }\n\n newData = Array.from(prices.values());\n }\n\n for (let i = 0; i < newData.length; i++) {\n const [price, quantity] = newData[i];\n if (isNaN(price) || isNaN(quantity)) continue;\n\n const newQuantity = new Decimal(quantity)\n .add(result.length > 0 ? result[result.length - 1][2] : 0)\n .toNumber();\n\n const newAmount = new Decimal(quantity * price)\n .add(result.length > 0 ? result[result.length - 1][3] : 0)\n .toNumber();\n\n result.push([price, quantity, newQuantity, newAmount]);\n // if the total is greater than the level, break\n // TODO:\n // if (i + 1 >= level) {\n // break;\n // }\n }\n\n return result;\n};\n\n/**\n * @name reduceOrderbook\n * @param depth\n * @param level\n * @param data\n */\nexport const reduceOrderbook = (\n depth: number | undefined,\n level: number,\n padding: boolean,\n data: OrderbookData,\n): OrderbookData => {\n let asks = reduceItems(depth, level, data.asks, true);\n\n let bids = reduceItems(depth, level, data.bids);\n\n /// not empty and asks.price <= bids.price\n if (asks.length !== 0 && bids.length !== 0 && asks[0][0] <= bids[0][0]) {\n if (asks.length === 1) {\n const [price, qty, newQuantity, newAmount] = asks[0];\n asks.shift();\n asks.push([price + (depth === undefined ? 0 : depth), qty, newQuantity, newAmount]);\n } else {\n const [bidPrice] = bids[0];\n while (asks.length > 0) {\n const [askPrice, askQty, newQuantity, newAmount] = asks[0];\n\n\n if (askPrice <= bidPrice) {\n // console.log(\"xxxxxxxxxxx reset ask list begin\", [...asks], { ...asks[0] });\n asks.shift();\n let logStr = \"\";\n for (let index = 0; index < asks.length; index++) {\n if (index === 0) {\n const quantity = asks[index][1] + askQty;\n asks[index][1] = quantity;\n asks[index][2] = quantity;\n // asks[index][3] += newAmount;\n // FIXME: fix this code later\n asks[index][3] = Math.ceil(quantity) * asks[index][0];\n } else {\n // asks[index][3] += newAmount;\n // FIXME: fix this code later\n asks[index][3] = asks[index][0] * asks[index][1] + asks[index - 1][3];\n }\n logStr += `index: ${index} ${asks[index]}\\n`;\n }\n // console.log(\"xxxxxxxxxxx reset ask list end\", logStr);\n } else {\n break;\n }\n }\n }\n }\n\n asks = asks.reverse();\n\n if (padding) {\n asks =\n asks.length < level ? paddingFn(level - asks.length).concat(asks) : asks;\n bids =\n bids.length < level ? bids.concat(paddingFn(level - bids.length)) : bids;\n }\n\n return {\n asks: asks,\n bids: bids,\n };\n};\n\nconst mergeItems = (data: OrderBookItem[], update: OrderBookItem[]) => {\n // let index = -1;\n if (data.length === 0) return update;\n\n data = data.filter(([price]) => !isNaN(price));\n\n while (update.length > 0) {\n const item = update.shift();\n //\n if (item) {\n const [price, quantity] = item;\n\n const index = data.findIndex(([p], index) => p === price);\n //\n if (index === -1) {\n if (quantity === 0) continue;\n data.push(item);\n } else {\n if (quantity === 0) {\n data.splice(index, 1);\n } else {\n data[index] = item;\n }\n }\n }\n }\n\n return data;\n};\n\nexport const mergeOrderbook = (data: OrderbookData, update: OrderbookData) => {\n let asks = [...data.asks];\n let bids = [...data.bids];\n\n asks = mergeItems(asks, update.asks).sort(asksSortFn);\n bids = mergeItems(bids, update.bids).sort(bidsSortFn);\n\n return {\n asks: asks,\n bids: bids,\n };\n};\n\n/**\n * Configuration for the Order Book\n */\nexport type OrderbookOptions = {\n /** Indicates the number of data entries to return for ask/bid, default is 10 */\n level?: number;\n /** Whether to fill in when the actual data entries are less than the level. If filled, it will add [nan, nan, nan, nan]. Default is true */\n padding?: boolean;\n};\n\nconst INIT_DATA = {asks: [], bids: []};\n\n/**\n * @name useOrderbookStream\n * @description React hook that returns the current orderbook for a given market\n */\nexport const useOrderbookStream = (\n symbol: string,\n initial: OrderbookData = INIT_DATA,\n options?: OrderbookOptions\n) => {\n if (!symbol) {\n throw new SDKError(\"useOrderbookStream requires a symbol\");\n }\n\n const level = options?.level ?? 10;\n const padding = options?.padding ?? true;\n\n const [requestData, setRequestData] = useState<OrderbookData | null>(null);\n const [data, setData] = useState<OrderbookData>(initial);\n const [isLoading, setIsLoading] = useState(true);\n // const [level, setLevel] = useState(() => options?.level ?? 10);\n\n const config = useSymbolsInfo()[symbol];\n\n const [depth, setDepth] = useState<number | undefined>();\n\n // markPrice, lastPrice\n const prevMiddlePrice = useRef<number>(0);\n\n const depths = useMemo(() => {\n const tick = config(\"quote_tick\");\n if (typeof tick === 'undefined') return [];\n\n try {\n const base = new Decimal(tick);\n return [base.toNumber(), base.mul(10).toNumber(), base.mul(100).toNumber(), base.mul(1000).toNumber()];\n } catch (e) {\n\n }\n return [tick];\n }, [config(\"quote_tick\")]);\n\n useEffect(() => {\n setDepth(config(\"quote_tick\"));\n }, [config(\"quote_tick\")]);\n\n const ws = useWS();\n\n const ticker = useTickerStream(symbol);\n\n const eventEmitter = useEventEmitter();\n\n // const orderbookRequest =\n\n useEffect(() => {\n let needRequestFullOrderbook= true;\n setIsLoading(true);\n let orderBookUpdateSub: any;\n let fullOrderBookUpdateSub: any;\n orderBookUpdateSub = ws.subscribe(\n {\n event: \"subscribe\",\n topic: `${symbol}@orderbookupdate`,\n },\n {\n formatter: (message) => message,\n onMessage: (message: any) => {\n const {data: wsData, ts} = message;\n const {asks, bids, prevTs} = wsData;\n orderbooksService.updateOrderbook(symbol, {asks, bids, ts, prevTs}, () => needRequestFullOrderbook = true);\n\n\n const data = orderbooksService.getRawOrderbook(symbol);\n setData({bids: data.bids, asks: data.asks});\n\n }\n }\n )\n\n if ( needRequestFullOrderbook) {\n setIsLoading(true);\n\n fullOrderBookUpdateSub = ws.onceSubscribe(\n {\n event: \"request\",\n id: `${symbol}@orderbook`,\n params: {\n type: \"orderbook\",\n symbol: symbol,\n },\n },\n {\n formatter: (message) => message,\n onMessage: (message: any) => {\n const {symbol, asks, bids, ts} = message.data;\n orderbooksService.setFullOrderbook(symbol, {asks, bids, ts})\n const data = orderbooksService.getRawOrderbook(symbol);\n setData({bids: data.bids, asks: data.asks});\n\n setIsLoading(false);\n },\n }\n )\n needRequestFullOrderbook= false;\n }\n\n return () => {\n // unsubscribe\n orderBookUpdateSub?.();\n fullOrderBookUpdateSub?.();\n orderbooksService.resetOrderBook(symbol);\n setData(INIT_DATA);\n }\n\n }, [symbol]);\n\n // const {data:markPrices} = useMarkPricesStream();\n\n const {data: markPrice} = useMarkPrice(symbol);\n\n\n const onItemClick = useCallback((item: OrderBookItem) => {\n eventEmitter.emit(\"orderbook:item:click\", item);\n }, []);\n\n const onDepthChange = useCallback((depth: number) => {\n //\n setDepth(() => depth);\n }, []);\n\n\n const reducedData = reduceOrderbook(depth, level, padding, {\n asks: [...data.asks],\n bids: [...data.bids],\n });\n\n // emit the asks0 and bids0\n useEffect(() => {\n const updateData = [\n reducedData.asks?.[reducedData.asks.length - 1]?.[0],\n reducedData.bids?.[0]?.[0]\n ];\n eventEmitter.emit(\"orderbook:update\", updateData);\n }, [reducedData.asks?.[reducedData.asks.length - 1]?.[0], reducedData.bids?.[0]?.[0]]);\n\n const middlePrice = useMemo(() => {\n let asksFrist = 0,\n bidsFirst = 0;\n\n if (data.asks.length > 0) {\n asksFrist = reducedData.asks?.[reducedData.asks.length - 1]?.[0];\n }\n\n if (data.bids.length > 0) {\n bidsFirst = data.bids[0][0];\n }\n\n if (isNaN(asksFrist) || isNaN(bidsFirst) || !ticker) return 0;\n\n\n return [asksFrist, bidsFirst, ticker[\"24h_close\"]].sort()[1];\n }, [ticker?.[\"24h_close\"], data]);\n\n useEffect(() => {\n prevMiddlePrice.current = middlePrice;\n }, [middlePrice]);\n\n return [\n {\n asks: reducedData.asks.slice(-level),\n bids: reducedData.bids.slice(0, level),\n markPrice: markPrice,\n middlePrice: [prevMiddlePrice.current, middlePrice],\n },\n {onDepthChange, depth, allDepths: depths, isLoading, onItemClick},\n ];\n};\n\nexport type useOrderbookStreamReturn = ReturnType<typeof useOrderbookStream>;\n"],"names":["useCallback","useEffect","useMemo","useRef","useState","useTickerStream","useMarkPrice","useWS","useEventEmitter","useSymbolsInfo","Decimal","removeTrailingZeros","min","SDKError","orderbooksService","paddingFn","len","Array","fill","Number","NaN","asksSortFn","a","b","bidsSortFn","reduceItems","depth","level","data","asks","isArray","length","newData","result","prices","Map","i","price","quantity","isNaN","priceKey","Math","ceil","mul","toNumber","floor","toString","indexOf","priceStr","index","decimal","slice","decimalDepth","decimalStr","has","item","get","itemPrice","add","set","from","values","newQuantity","newAmount","push","reduceOrderbook","padding","bids","qty","shift","undefined","bidPrice","askPrice","askQty","logStr","reverse","concat","mergeItems","update","filter","findIndex","p","splice","mergeOrderbook","sort","INIT_DATA","useOrderbookStream","symbol","initial","options","requestData","setRequestData","setData","isLoading","setIsLoading","config","setDepth","prevMiddlePrice","depths","tick","base","e","ws","ticker","eventEmitter","needRequestFullOrderbook","orderBookUpdateSub","fullOrderBookUpdateSub","subscribe","event","topic","formatter","message","onMessage","wsData","ts","prevTs","updateOrderbook","getRawOrderbook","onceSubscribe","id","params","type","setFullOrderbook","resetOrderBook","markPrice","onItemClick","emit","onDepthChange","reducedData","updateData","middlePrice","asksFrist","bidsFirst","current","allDepths"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
package/esm/version.d.ts
CHANGED
package/esm/version.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AACA,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,mBAAmB,CAAC,EAAE;YAClB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;SACzB,CAAC;KACL;CACJ;;AAMD,
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AACA,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,mBAAmB,CAAC,EAAE;YAClB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;SACzB,CAAC;KACL;CACJ;;AAMD,wBAAuB"}
|
package/esm/version.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
if (typeof window !== 'undefined') {
|
|
2
2
|
window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};
|
|
3
|
-
window.__ORDERLY_VERSION__["@orderly.network/hooks"] = "1.3.
|
|
3
|
+
window.__ORDERLY_VERSION__["@orderly.network/hooks"] = "1.3.2";
|
|
4
4
|
}
|
|
5
|
-
export default "1.3.
|
|
5
|
+
export default "1.3.2";
|
|
6
6
|
|
|
7
7
|
//# sourceMappingURL=version.js.map
|
package/esm/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/version.ts"],"sourcesContent":["\ndeclare global {\n interface Window {\n __ORDERLY_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif(typeof window !== 'undefined') {\n window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};\n window.__ORDERLY_VERSION__[\"@orderly.network/hooks\"] = \"1.3.
|
|
1
|
+
{"version":3,"sources":["../src/version.ts"],"sourcesContent":["\ndeclare global {\n interface Window {\n __ORDERLY_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif(typeof window !== 'undefined') {\n window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};\n window.__ORDERLY_VERSION__[\"@orderly.network/hooks\"] = \"1.3.2\";\n};\n\nexport default \"1.3.2\";\n"],"names":["window","__ORDERLY_VERSION__"],"rangeMappings":";;;;","mappings":"AAQA,IAAG,OAAOA,WAAW,aAAa;IAC9BA,OAAOC,mBAAmB,GAAGD,OAAOC,mBAAmB,IAAI,CAAC;IAC5DD,OAAOC,mBAAmB,CAAC,yBAAyB,GAAG;AAC3D;AAEA,eAAe,QAAQ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOrderbookStream.d.ts","sourceRoot":"","sources":["../../src/orderly/useOrderbookStream.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;AAErC,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,IAAI,EAAE,aAAa,EAAE,CAAC;CACzB,CAAC;AAyFF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,UACjB,MAAM,GAAG,SAAS,SAClB,MAAM,WACJ,OAAO,QACV,aAAa,KACpB,aAyDF,CAAC;AAgCF,eAAO,MAAM,cAAc,SAAU,aAAa,UAAU,aAAa;;;CAWxE,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC3B,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4IAA4I;IAC5I,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAIF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,WACnB,MAAM,YACL,aAAa,YACZ,gBAAgB;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"useOrderbookStream.d.ts","sourceRoot":"","sources":["../../src/orderly/useOrderbookStream.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;AAErC,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,IAAI,EAAE,aAAa,EAAE,CAAC;CACzB,CAAC;AAyFF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,UACjB,MAAM,GAAG,SAAS,SAClB,MAAM,WACJ,OAAO,QACV,aAAa,KACpB,aAyDF,CAAC;AAgCF,eAAO,MAAM,cAAc,SAAU,aAAa,UAAU,aAAa;;;CAWxE,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC3B,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4IAA4I;IAC5I,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAIF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,WACnB,MAAM,YACL,aAAa,YACZ,gBAAgB;;;;;;;;;;;2BAqHgB,MAAM;;;;;;;;;IAmDnD,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
|
|
@@ -67,7 +67,7 @@ const reduceItems = (depth, level, data, asks = false)=>{
|
|
|
67
67
|
const priceStr = price.toString();
|
|
68
68
|
const index = priceStr.indexOf(".");
|
|
69
69
|
const decimal = priceStr.slice(index + 1);
|
|
70
|
-
const decimalDepth = depth.toString().slice(2).length;
|
|
70
|
+
const decimalDepth = (0, _utils.removeTrailingZeros)(depth).toString().slice(2).length;
|
|
71
71
|
const decimalStr = decimal.slice(0, (0, _ramda.min)(decimal.length, decimalDepth));
|
|
72
72
|
priceKey = new _utils.Decimal(priceStr.slice(0, index) + "." + decimalStr).toNumber();
|
|
73
73
|
}
|
|
@@ -222,11 +222,18 @@ const useOrderbookStream = (symbol, initial = INIT_DATA, options)=>{
|
|
|
222
222
|
const prevMiddlePrice = (0, _react.useRef)(0);
|
|
223
223
|
const depths = (0, _react.useMemo)(()=>{
|
|
224
224
|
const tick = config("quote_tick");
|
|
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) {}
|
|
225
235
|
return [
|
|
226
|
-
tick
|
|
227
|
-
tick * 10,
|
|
228
|
-
tick * 100,
|
|
229
|
-
tick * 1000
|
|
236
|
+
tick
|
|
230
237
|
];
|
|
231
238
|
}, [
|
|
232
239
|
config("quote_tick")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/orderly/useOrderbookStream.ts"],"sourcesContent":["import {useCallback, useEffect, useMemo, useRef, useState} from \"react\";\nimport {useTickerStream} from \"./useTickerStream\";\nimport {useMarkPrice} from \"./useMarkPrice\";\nimport {useWS} from \"../useWS\";\nimport {useEventEmitter} from \"../useEventEmitter\";\nimport {useSymbolsInfo} from \"./useSymbolsInfo\";\nimport {Decimal} from \"@orderly.network/utils\";\nimport {max, min} from \"ramda\";\nimport {SDKError} from \"@orderly.network/types\";\nimport orderbooksService from './orderbook.service';\n\nexport type OrderBookItem = number[];\n\nexport type OrderbookData = {\n asks: OrderBookItem[];\n bids: OrderBookItem[];\n};\n\nconst paddingFn = (len: number) =>\n Array(len).fill([Number.NaN, Number.NaN, Number.NaN, Number.NaN] as OrderBookItem);\n\nconst asksSortFn = (a: OrderBookItem, b: OrderBookItem) => a[0] - b[0];\n\nconst bidsSortFn = (a: OrderBookItem, b: OrderBookItem) => b[0] - a[0];\n\n// const commonSortFn = (a: OrderBookItem, b: OrderBookItem) => b[0] - a[0];\n\nconst reduceItems = (\n depth: number | undefined,\n level: number,\n data: OrderBookItem[],\n asks = false\n) => {\n if (!Array.isArray(data) || data.length === 0) {\n return [];\n }\n let newData = [...data];\n const result: OrderBookItem[] = [];\n\n //\n\n if (typeof depth !== \"undefined\") {\n const prices = new Map<number, number[]>();\n for (let i = 0; i < data.length; i++) {\n const [price, quantity] = data[i];\n if (isNaN(price) || isNaN(quantity)) continue;\n let priceKey;\n\n if (asks) {\n priceKey = new Decimal(Math.ceil(price / depth)).mul(depth).toNumber();\n } else {\n priceKey = new Decimal(Math.floor(price / depth)).mul(depth).toNumber();\n }\n\n if (depth < 1 && depth > 0 && priceKey.toString().indexOf(\".\") !== -1) {\n const priceStr = price.toString();\n const index = priceStr.indexOf(\".\");\n const decimal = priceStr.slice(index + 1);\n const decimalDepth = depth.toString().slice(2).length;\n const decimalStr = decimal.slice(0, min(decimal.length, decimalDepth));\n priceKey = new Decimal(\n priceStr.slice(0, index) + \".\" + decimalStr\n ).toNumber();\n }\n\n // console.log(`reduce items price: ${price}, priceKey: ${priceKey}, depth: ${depth}, resetPriceKey: ${price.toString === priceKey.toString}`);\n // console.log(`ask: ${asks} reduce items price: ${priceKey}`);\n\n if (prices.has(priceKey)) {\n const item = prices.get(priceKey)!;\n const itemPrice = new Decimal(item[1]).add(quantity).toNumber();\n\n // prices.push([price, quantity]);\n prices.set(priceKey, [priceKey, itemPrice]);\n } else {\n prices.set(priceKey, [priceKey, quantity]);\n }\n }\n\n newData = Array.from(prices.values());\n }\n\n for (let i = 0; i < newData.length; i++) {\n const [price, quantity] = newData[i];\n if (isNaN(price) || isNaN(quantity)) continue;\n\n const newQuantity = new Decimal(quantity)\n .add(result.length > 0 ? result[result.length - 1][2] : 0)\n .toNumber();\n\n const newAmount = new Decimal(quantity * price)\n .add(result.length > 0 ? result[result.length - 1][3] : 0)\n .toNumber();\n\n result.push([price, quantity, newQuantity, newAmount]);\n // if the total is greater than the level, break\n // TODO:\n // if (i + 1 >= level) {\n // break;\n // }\n }\n\n return result;\n};\n\n/**\n * @name reduceOrderbook\n * @param depth\n * @param level\n * @param data\n */\nexport const reduceOrderbook = (\n depth: number | undefined,\n level: number,\n padding: boolean,\n data: OrderbookData,\n): OrderbookData => {\n let asks = reduceItems(depth, level, data.asks, true);\n\n let bids = reduceItems(depth, level, data.bids);\n\n /// not empty and asks.price <= bids.price\n if (asks.length !== 0 && bids.length !== 0 && asks[0][0] <= bids[0][0]) {\n if (asks.length === 1) {\n const [price, qty, newQuantity, newAmount] = asks[0];\n asks.shift();\n asks.push([price + (depth === undefined ? 0 : depth), qty, newQuantity, newAmount]);\n } else {\n const [bidPrice] = bids[0];\n while (asks.length > 0) {\n const [askPrice, askQty, newQuantity, newAmount] = asks[0];\n\n\n if (askPrice <= bidPrice) {\n // console.log(\"xxxxxxxxxxx reset ask list begin\", [...asks], { ...asks[0] });\n asks.shift();\n let logStr = \"\";\n for (let index = 0; index < asks.length; index++) {\n if (index === 0) {\n const quantity = asks[index][1] + askQty;\n asks[index][1] = quantity;\n asks[index][2] = quantity;\n // asks[index][3] += newAmount;\n // FIXME: fix this code later\n asks[index][3] = Math.ceil(quantity) * asks[index][0];\n } else {\n // asks[index][3] += newAmount;\n // FIXME: fix this code later\n asks[index][3] = asks[index][0] * asks[index][1] + asks[index - 1][3];\n }\n logStr += `index: ${index} ${asks[index]}\\n`;\n }\n // console.log(\"xxxxxxxxxxx reset ask list end\", logStr);\n } else {\n break;\n }\n }\n }\n }\n\n asks = asks.reverse();\n\n if (padding) {\n asks =\n asks.length < level ? paddingFn(level - asks.length).concat(asks) : asks;\n bids =\n bids.length < level ? bids.concat(paddingFn(level - bids.length)) : bids;\n }\n\n return {\n asks: asks,\n bids: bids,\n };\n};\n\nconst mergeItems = (data: OrderBookItem[], update: OrderBookItem[]) => {\n // let index = -1;\n if (data.length === 0) return update;\n\n data = data.filter(([price]) => !isNaN(price));\n\n while (update.length > 0) {\n const item = update.shift();\n //\n if (item) {\n const [price, quantity] = item;\n\n const index = data.findIndex(([p], index) => p === price);\n //\n if (index === -1) {\n if (quantity === 0) continue;\n data.push(item);\n } else {\n if (quantity === 0) {\n data.splice(index, 1);\n } else {\n data[index] = item;\n }\n }\n }\n }\n\n return data;\n};\n\nexport const mergeOrderbook = (data: OrderbookData, update: OrderbookData) => {\n let asks = [...data.asks];\n let bids = [...data.bids];\n\n asks = mergeItems(asks, update.asks).sort(asksSortFn);\n bids = mergeItems(bids, update.bids).sort(bidsSortFn);\n\n return {\n asks: asks,\n bids: bids,\n };\n};\n\n/**\n * Configuration for the Order Book\n */\nexport type OrderbookOptions = {\n /** Indicates the number of data entries to return for ask/bid, default is 10 */\n level?: number;\n /** Whether to fill in when the actual data entries are less than the level. If filled, it will add [nan, nan, nan, nan]. Default is true */\n padding?: boolean;\n};\n\nconst INIT_DATA = {asks: [], bids: []};\n\n/**\n * @name useOrderbookStream\n * @description React hook that returns the current orderbook for a given market\n */\nexport const useOrderbookStream = (\n symbol: string,\n initial: OrderbookData = INIT_DATA,\n options?: OrderbookOptions\n) => {\n if (!symbol) {\n throw new SDKError(\"useOrderbookStream requires a symbol\");\n }\n\n const level = options?.level ?? 10;\n const padding = options?.padding ?? true;\n\n const [requestData, setRequestData] = useState<OrderbookData | null>(null);\n const [data, setData] = useState<OrderbookData>(initial);\n const [isLoading, setIsLoading] = useState(true);\n // const [level, setLevel] = useState(() => options?.level ?? 10);\n\n const config = useSymbolsInfo()[symbol];\n\n const [depth, setDepth] = useState<number | undefined>();\n\n // markPrice, lastPrice\n const prevMiddlePrice = useRef<number>(0);\n\n const depths = useMemo(() => {\n const tick = config(\"quote_tick\");\n\n return [tick, tick * 10, tick * 100, tick * 1000];\n }, [config(\"quote_tick\")]);\n\n useEffect(() => {\n setDepth(config(\"quote_tick\"));\n }, [config(\"quote_tick\")]);\n\n const ws = useWS();\n\n const ticker = useTickerStream(symbol);\n\n const eventEmitter = useEventEmitter();\n\n // const orderbookRequest =\n\n useEffect(() => {\n let needRequestFullOrderbook= true;\n setIsLoading(true);\n let orderBookUpdateSub: any;\n let fullOrderBookUpdateSub: any;\n orderBookUpdateSub = ws.subscribe(\n {\n event: \"subscribe\",\n topic: `${symbol}@orderbookupdate`,\n },\n {\n formatter: (message) => message,\n onMessage: (message: any) => {\n const {data: wsData, ts} = message;\n const {asks, bids, prevTs} = wsData;\n orderbooksService.updateOrderbook(symbol, {asks, bids, ts, prevTs}, () => needRequestFullOrderbook = true);\n\n\n const data = orderbooksService.getRawOrderbook(symbol);\n setData({bids: data.bids, asks: data.asks});\n\n }\n }\n )\n\n if ( needRequestFullOrderbook) {\n setIsLoading(true);\n\n fullOrderBookUpdateSub = ws.onceSubscribe(\n {\n event: \"request\",\n id: `${symbol}@orderbook`,\n params: {\n type: \"orderbook\",\n symbol: symbol,\n },\n },\n {\n formatter: (message) => message,\n onMessage: (message: any) => {\n const {symbol, asks, bids, ts} = message.data;\n orderbooksService.setFullOrderbook(symbol, {asks, bids, ts})\n const data = orderbooksService.getRawOrderbook(symbol);\n setData({bids: data.bids, asks: data.asks});\n\n setIsLoading(false);\n },\n }\n )\n needRequestFullOrderbook= false;\n }\n\n return () => {\n // unsubscribe\n orderBookUpdateSub?.();\n fullOrderBookUpdateSub?.();\n orderbooksService.resetOrderBook(symbol);\n setData(INIT_DATA);\n }\n\n }, [symbol]);\n\n // const {data:markPrices} = useMarkPricesStream();\n\n const {data: markPrice} = useMarkPrice(symbol);\n\n\n const onItemClick = useCallback((item: OrderBookItem) => {\n eventEmitter.emit(\"orderbook:item:click\", item);\n }, []);\n\n const onDepthChange = useCallback((depth: number) => {\n //\n setDepth(() => depth);\n }, []);\n\n\n const reducedData = reduceOrderbook(depth, level, padding, {\n asks: [...data.asks],\n bids: [...data.bids],\n });\n\n // emit the asks0 and bids0\n useEffect(() => {\n const updateData = [\n reducedData.asks?.[reducedData.asks.length - 1]?.[0],\n reducedData.bids?.[0]?.[0]\n ];\n eventEmitter.emit(\"orderbook:update\", updateData);\n }, [reducedData.asks?.[reducedData.asks.length - 1]?.[0], reducedData.bids?.[0]?.[0]]);\n\n const middlePrice = useMemo(() => {\n let asksFrist = 0,\n bidsFirst = 0;\n\n if (data.asks.length > 0) {\n asksFrist = reducedData.asks?.[reducedData.asks.length - 1]?.[0];\n }\n\n if (data.bids.length > 0) {\n bidsFirst = data.bids[0][0];\n }\n\n if (isNaN(asksFrist) || isNaN(bidsFirst) || !ticker) return 0;\n\n\n return [asksFrist, bidsFirst, ticker[\"24h_close\"]].sort()[1];\n }, [ticker?.[\"24h_close\"], data]);\n\n useEffect(() => {\n prevMiddlePrice.current = middlePrice;\n }, [middlePrice]);\n\n return [\n {\n asks: reducedData.asks.slice(-level),\n bids: reducedData.bids.slice(0, level),\n markPrice: markPrice,\n middlePrice: [prevMiddlePrice.current, middlePrice],\n },\n {onDepthChange, depth, allDepths: depths, isLoading, onItemClick},\n ];\n};\n\nexport type useOrderbookStreamReturn = ReturnType<typeof useOrderbookStream>;\n"],"names":["mergeOrderbook","reduceOrderbook","useOrderbookStream","paddingFn","len","Array","fill","Number","NaN","asksSortFn","a","b","bidsSortFn","reduceItems","depth","level","data","asks","isArray","length","newData","result","prices","Map","i","price","quantity","isNaN","priceKey","Decimal","Math","ceil","mul","toNumber","floor","toString","indexOf","priceStr","index","decimal","slice","decimalDepth","decimalStr","min","has","item","get","itemPrice","add","set","from","values","newQuantity","newAmount","push","padding","bids","qty","shift","undefined","bidPrice","askPrice","askQty","logStr","reverse","concat","mergeItems","update","filter","findIndex","p","splice","sort","INIT_DATA","symbol","initial","options","SDKError","requestData","setRequestData","useState","setData","isLoading","setIsLoading","config","useSymbolsInfo","setDepth","prevMiddlePrice","useRef","depths","useMemo","tick","useEffect","ws","useWS","ticker","useTickerStream","eventEmitter","useEventEmitter","needRequestFullOrderbook","orderBookUpdateSub","fullOrderBookUpdateSub","subscribe","event","topic","formatter","message","onMessage","wsData","ts","prevTs","orderbooksService","updateOrderbook","getRawOrderbook","onceSubscribe","id","params","type","setFullOrderbook","resetOrderBook","markPrice","useMarkPrice","onItemClick","useCallback","emit","onDepthChange","reducedData","updateData","middlePrice","asksFrist","bidsFirst","current","allDepths"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
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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"}
|
package/lib/version.d.ts
CHANGED
package/lib/version.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AACA,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,mBAAmB,CAAC,EAAE;YAClB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;SACzB,CAAC;KACL;CACJ;;AAMD,
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AACA,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,mBAAmB,CAAC,EAAE;YAClB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;SACzB,CAAC;KACL;CACJ;;AAMD,wBAAuB"}
|
package/lib/version.js
CHANGED
|
@@ -10,8 +10,8 @@ Object.defineProperty(exports, "default", {
|
|
|
10
10
|
});
|
|
11
11
|
if (typeof window !== 'undefined') {
|
|
12
12
|
window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};
|
|
13
|
-
window.__ORDERLY_VERSION__["@orderly.network/hooks"] = "1.3.
|
|
13
|
+
window.__ORDERLY_VERSION__["@orderly.network/hooks"] = "1.3.2";
|
|
14
14
|
}
|
|
15
|
-
const _default = "1.3.
|
|
15
|
+
const _default = "1.3.2";
|
|
16
16
|
|
|
17
17
|
//# sourceMappingURL=version.js.map
|
package/lib/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/version.ts"],"sourcesContent":["\ndeclare global {\n interface Window {\n __ORDERLY_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif(typeof window !== 'undefined') {\n window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};\n window.__ORDERLY_VERSION__[\"@orderly.network/hooks\"] = \"1.3.
|
|
1
|
+
{"version":3,"sources":["../src/version.ts"],"sourcesContent":["\ndeclare global {\n interface Window {\n __ORDERLY_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif(typeof window !== 'undefined') {\n window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};\n window.__ORDERLY_VERSION__[\"@orderly.network/hooks\"] = \"1.3.2\";\n};\n\nexport default \"1.3.2\";\n"],"names":["window","__ORDERLY_VERSION__"],"rangeMappings":";;;;;;;;;;;;;;","mappings":";;;;+BAaA;;;eAAA;;;AALA,IAAG,OAAOA,WAAW,aAAa;IAC9BA,OAAOC,mBAAmB,GAAGD,OAAOC,mBAAmB,IAAI,CAAC;IAC5DD,OAAOC,mBAAmB,CAAC,yBAAyB,GAAG;AAC3D;MAEA,WAAe"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@orderly.network/hooks",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.2",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "esm/index.js",
|
|
@@ -30,18 +30,18 @@
|
|
|
30
30
|
"tsup": "^7.1.0",
|
|
31
31
|
"typedoc": "^0.24.8",
|
|
32
32
|
"typescript": "^5.1.6",
|
|
33
|
-
"tsconfig": "0.2.
|
|
33
|
+
"tsconfig": "0.2.2"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"ramda": "^0.29.0",
|
|
37
37
|
"swr": "^2.2.4",
|
|
38
38
|
"use-constant": "^1.1.1",
|
|
39
39
|
"use-debounce": "^9.0.4",
|
|
40
|
-
"@orderly.network/
|
|
41
|
-
"@orderly.network/
|
|
42
|
-
"@orderly.network/
|
|
43
|
-
"@orderly.network/
|
|
44
|
-
"@orderly.network/
|
|
40
|
+
"@orderly.network/net": "1.3.2",
|
|
41
|
+
"@orderly.network/perp": "3.1.2",
|
|
42
|
+
"@orderly.network/core": "1.3.2",
|
|
43
|
+
"@orderly.network/utils": "1.3.2",
|
|
44
|
+
"@orderly.network/types": "1.3.2"
|
|
45
45
|
},
|
|
46
46
|
"publishConfig": {
|
|
47
47
|
"access": "public"
|