@orderly.network/hooks 0.0.27 → 0.0.29

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/dist/index.d.mts CHANGED
@@ -97,6 +97,8 @@ declare const useEventEmitter: (channel?: string) => EventEmitter<string | symbo
97
97
 
98
98
  declare function useSessionStorage<T>(key: string, initialValue: T): [T, (data: any) => void];
99
99
 
100
+ declare function useLocalStorage<T>(key: string, initialValue: T): [T, any];
101
+
100
102
  type useRunOnceProps = {
101
103
  fn: () => any;
102
104
  sessionKey?: string;
@@ -223,7 +225,7 @@ declare const useOrderStream: ({ status, symbol, side, size, }?: {
223
225
  } | null)[];
224
226
 
225
227
  interface MarketTradeStreamOptions {
226
- level?: number;
228
+ limit?: number;
227
229
  }
228
230
  declare const useMarketTradeStream: (symbol: string, options?: MarketTradeStreamOptions) => {
229
231
  data: API.Trade[];
@@ -324,4 +326,4 @@ declare namespace index {
324
326
  };
325
327
  }
326
328
 
327
- export { AppStateErrors, DataSourceProvider, OrderStatus, OrderlyAppConfig, OrderlyContext, OrderlyContextState, OrderlyProvider, index as apis, useAccount, useAccountInfo, useAccountInstance, useAppState, useBalance, useChains, useCollateral, useEventEmitter, useExecutionReport, useFetures, useFundingRate, useHolding, useLeverage, useMarginRatio, useMarkPrice, useMarkPricesStream, useMarketTradeStream, useMarketsStream, useMaxQty, useMutation, useOrderEntry, useOrderStream, useOrderbookStream, usePositionStream, usePreLoadData, usePrivateDataObserver, usePrivateObserve, usePrivateQuery, useQuery, useRunOnce, useSessionStorage, useSymbolsInfo, useTickerStream, useTokenInfo, useTopicObserve, useTradingView, useWS };
329
+ export { AppStateErrors, DataSourceProvider, OrderStatus, OrderlyAppConfig, OrderlyContext, OrderlyContextState, OrderlyProvider, index as apis, useAccount, useAccountInfo, useAccountInstance, useAppState, useBalance, useChains, useCollateral, useEventEmitter, useExecutionReport, useFetures, useFundingRate, useHolding, useLeverage, useLocalStorage, useMarginRatio, useMarkPrice, useMarkPricesStream, useMarketTradeStream, useMarketsStream, useMaxQty, useMutation, useOrderEntry, useOrderStream, useOrderbookStream, usePositionStream, usePreLoadData, usePrivateDataObserver, usePrivateObserve, usePrivateQuery, useQuery, useRunOnce, useSessionStorage, useSymbolsInfo, useTickerStream, useTokenInfo, useTopicObserve, useTradingView, useWS };
package/dist/index.d.ts CHANGED
@@ -97,6 +97,8 @@ declare const useEventEmitter: (channel?: string) => EventEmitter<string | symbo
97
97
 
98
98
  declare function useSessionStorage<T>(key: string, initialValue: T): [T, (data: any) => void];
99
99
 
100
+ declare function useLocalStorage<T>(key: string, initialValue: T): [T, any];
101
+
100
102
  type useRunOnceProps = {
101
103
  fn: () => any;
102
104
  sessionKey?: string;
@@ -223,7 +225,7 @@ declare const useOrderStream: ({ status, symbol, side, size, }?: {
223
225
  } | null)[];
224
226
 
225
227
  interface MarketTradeStreamOptions {
226
- level?: number;
228
+ limit?: number;
227
229
  }
228
230
  declare const useMarketTradeStream: (symbol: string, options?: MarketTradeStreamOptions) => {
229
231
  data: API.Trade[];
@@ -324,4 +326,4 @@ declare namespace index {
324
326
  };
325
327
  }
326
328
 
327
- export { AppStateErrors, DataSourceProvider, OrderStatus, OrderlyAppConfig, OrderlyContext, OrderlyContextState, OrderlyProvider, index as apis, useAccount, useAccountInfo, useAccountInstance, useAppState, useBalance, useChains, useCollateral, useEventEmitter, useExecutionReport, useFetures, useFundingRate, useHolding, useLeverage, useMarginRatio, useMarkPrice, useMarkPricesStream, useMarketTradeStream, useMarketsStream, useMaxQty, useMutation, useOrderEntry, useOrderStream, useOrderbookStream, usePositionStream, usePreLoadData, usePrivateDataObserver, usePrivateObserve, usePrivateQuery, useQuery, useRunOnce, useSessionStorage, useSymbolsInfo, useTickerStream, useTokenInfo, useTopicObserve, useTradingView, useWS };
329
+ export { AppStateErrors, DataSourceProvider, OrderStatus, OrderlyAppConfig, OrderlyContext, OrderlyContextState, OrderlyProvider, index as apis, useAccount, useAccountInfo, useAccountInstance, useAppState, useBalance, useChains, useCollateral, useEventEmitter, useExecutionReport, useFetures, useFundingRate, useHolding, useLeverage, useLocalStorage, useMarginRatio, useMarkPrice, useMarkPricesStream, useMarketTradeStream, useMarketsStream, useMaxQty, useMutation, useOrderEntry, useOrderStream, useOrderbookStream, usePositionStream, usePreLoadData, usePrivateDataObserver, usePrivateObserve, usePrivateQuery, useQuery, useRunOnce, useSessionStorage, useSymbolsInfo, useTickerStream, useTokenInfo, useTopicObserve, useTradingView, useWS };
package/dist/index.js CHANGED
@@ -350,6 +350,18 @@ var useEventEmitter = (channel) => {
350
350
  return ee;
351
351
  });
352
352
  };
353
+
354
+ // src/utils/json.ts
355
+ function parseJSON(value) {
356
+ try {
357
+ return value === "undefined" ? void 0 : JSON.parse(value != null ? value : "");
358
+ } catch (e) {
359
+ console.log("parsing error on", { value });
360
+ return void 0;
361
+ }
362
+ }
363
+
364
+ // src/useSessionStorage.ts
353
365
  function useSessionStorage(key, initialValue) {
354
366
  const readValue = React2.useCallback(() => {
355
367
  if (typeof window === "undefined") {
@@ -401,13 +413,41 @@ function useSessionStorage(key, initialValue) {
401
413
  );
402
414
  return [storedValue, setValue];
403
415
  }
404
- function parseJSON(value) {
405
- try {
406
- return value === "undefined" ? void 0 : JSON.parse(value != null ? value : "");
407
- } catch (e) {
408
- console.log("parsing error on", { value });
409
- return void 0;
410
- }
416
+ function useLocalStorage(key, initialValue) {
417
+ const readValue = React2.useCallback(() => {
418
+ if (typeof window === "undefined") {
419
+ return initialValue;
420
+ }
421
+ try {
422
+ const item = window.localStorage.getItem(key);
423
+ return item ? parseJSON(item) : initialValue;
424
+ } catch (error) {
425
+ console.warn(`Error reading localStorage key \u201C${key}\u201D:`, error);
426
+ return initialValue;
427
+ }
428
+ }, [initialValue, key]);
429
+ const [storedValue, setStoredValue] = React2.useState(readValue);
430
+ const setValue = React2.useCallback(
431
+ (value) => {
432
+ if (typeof window === "undefined") {
433
+ console.warn(
434
+ `Tried setting localStorage key \u201C${key}\u201D even though environment is not a client`
435
+ );
436
+ }
437
+ try {
438
+ const newValue = value instanceof Function ? value(storedValue) : value;
439
+ window.localStorage.setItem(key, JSON.stringify(newValue));
440
+ setStoredValue(() => newValue);
441
+ } catch (error) {
442
+ console.warn(`Error setting localStorage key \u201C${key}\u201D:`, error);
443
+ }
444
+ },
445
+ [storedValue]
446
+ );
447
+ React2.useEffect(() => {
448
+ setStoredValue(readValue());
449
+ }, []);
450
+ return [storedValue, setValue];
411
451
  }
412
452
  var useRunOnce = ({ fn, sessionKey }) => {
413
453
  const triggered = React2.useRef(false);
@@ -586,8 +626,6 @@ var useSymbolsInfo = () => {
586
626
  });
587
627
  return createGetter(data);
588
628
  };
589
-
590
- // src/orderly/useOrderbookStream.ts
591
629
  var paddingFn = (len) => Array(len).fill([Number.NaN, Number.NaN, Number.NaN]);
592
630
  var asksSortFn = (a, b) => a[0] - b[0];
593
631
  var bidsSortFn = (a, b) => b[0] - a[0];
@@ -605,13 +643,13 @@ var reduceItems = (depth, level, data, asks = false) => {
605
643
  continue;
606
644
  let priceKey;
607
645
  if (asks) {
608
- priceKey = Math.ceil(price / depth) * depth;
646
+ priceKey = new utils.Decimal(Math.ceil(price / depth)).mul(depth).toNumber();
609
647
  } else {
610
- priceKey = Math.floor(price / depth) * depth;
648
+ priceKey = new utils.Decimal(Math.floor(price / depth)).mul(depth).toNumber();
611
649
  }
612
650
  if (prices.has(priceKey)) {
613
651
  const item = prices.get(priceKey);
614
- const itemPrice = item[1] + quantity;
652
+ const itemPrice = new utils.Decimal(item[1]).add(quantity).toNumber();
615
653
  prices.set(priceKey, [priceKey, itemPrice]);
616
654
  } else {
617
655
  prices.set(priceKey, [priceKey, quantity]);
@@ -623,11 +661,8 @@ var reduceItems = (depth, level, data, asks = false) => {
623
661
  const [price, quantity] = newData[i];
624
662
  if (isNaN(price) || isNaN(quantity))
625
663
  continue;
626
- result.push([
627
- price,
628
- quantity,
629
- quantity + (result.length > 0 ? result[result.length - 1][2] : 0)
630
- ]);
664
+ const newQuantity = new utils.Decimal(quantity).add(result.length > 0 ? result[result.length - 1][2] : 0).toNumber();
665
+ result.push([price, quantity, newQuantity]);
631
666
  if (i + 1 >= level) {
632
667
  break;
633
668
  }
@@ -645,6 +680,7 @@ var reduceOrderbook = (depth, level, data) => {
645
680
  var mergeItems = (data, update) => {
646
681
  if (data.length === 0)
647
682
  return update;
683
+ data = data.filter(([price]) => !isNaN(price));
648
684
  while (update.length > 0) {
649
685
  const item = update.shift();
650
686
  if (item) {
@@ -697,6 +733,7 @@ var useOrderbookStream = (symbol, initial = { asks: [], bids: [] }, options) =>
697
733
  ws.onceSubscribe(
698
734
  {
699
735
  event: "request",
736
+ id: `${symbol}@orderbook`,
700
737
  params: {
701
738
  type: "orderbook",
702
739
  symbol
@@ -826,10 +863,9 @@ function priceInputHandle(inputs) {
826
863
  return [values, input, value, markPrice, config];
827
864
  }
828
865
  const total = price.mul(values.order_quantity);
829
- const quantityDP = total.dp();
830
866
  return [
831
867
  __spreadProps(__spreadValues({}, values), {
832
- total: total.todp(Math.max(quantityDP, config.baseDP)).toString()
868
+ total: total.todp(2).toString()
833
869
  }),
834
870
  input,
835
871
  value,
@@ -853,10 +889,10 @@ function quantityInputHandle(inputs) {
853
889
  price = Number(values.order_price);
854
890
  }
855
891
  const total = quantity.mul(price);
856
- const totalDP = total.dp();
892
+ total.dp();
857
893
  return [
858
894
  __spreadProps(__spreadValues({}, values), {
859
- total: total.todp(Math.min(config.quoteDP, totalDP)).toNumber()
895
+ total: total.todp(2).toNumber()
860
896
  }),
861
897
  input,
862
898
  value,
@@ -1773,29 +1809,48 @@ var useMarketTradeStream = (symbol, options = {}) => {
1773
1809
  throw new Error("useTradeStream: symbol is required");
1774
1810
  }
1775
1811
  const [trades, setTrades] = React2.useState([]);
1776
- const { level = 20 } = options;
1777
- const { isLoading } = useQuery(
1778
- `/v1/public/market_trades?symbol=${symbol}&limit=${level}`,
1779
- {
1780
- onSuccess: (data) => {
1781
- if (Array.isArray(data)) {
1812
+ const [isLoading, setIsLoading] = React2.useState(false);
1813
+ const { limit = 50 } = options;
1814
+ const ws = useWS();
1815
+ React2.useEffect(() => {
1816
+ setIsLoading(true);
1817
+ setTrades(() => []);
1818
+ ws.onceSubscribe(
1819
+ {
1820
+ id: `${symbol}@trade`,
1821
+ event: "request",
1822
+ params: {
1823
+ type: "trade",
1824
+ symbol,
1825
+ limit
1826
+ }
1827
+ },
1828
+ {
1829
+ onMessage: (data) => {
1830
+ setIsLoading(false);
1782
1831
  setTrades(() => data);
1783
1832
  }
1784
- return data;
1785
1833
  }
1786
- }
1787
- );
1788
- const ws = useWS();
1834
+ );
1835
+ }, [symbol]);
1789
1836
  React2.useEffect(() => {
1837
+ if (trades.length <= 0)
1838
+ return;
1790
1839
  const unsubscript = ws.subscribe(`@${symbol}/@trade`, {
1791
1840
  onMessage: (data) => {
1792
- console.log("ws: trade", data);
1841
+ setTrades((prev) => {
1842
+ const arr = [data, ...prev];
1843
+ if (arr.length > limit) {
1844
+ arr.pop();
1845
+ }
1846
+ return arr;
1847
+ });
1793
1848
  }
1794
1849
  });
1795
1850
  return () => {
1796
1851
  unsubscript == null ? void 0 : unsubscript();
1797
1852
  };
1798
- }, []);
1853
+ }, [symbol, trades]);
1799
1854
  return { data: trades, isLoading };
1800
1855
  };
1801
1856
  var useMarginRatio = () => {
@@ -1969,6 +2024,7 @@ exports.useFetures = useFetures;
1969
2024
  exports.useFundingRate = useFundingRate;
1970
2025
  exports.useHolding = useHolding;
1971
2026
  exports.useLeverage = useLeverage;
2027
+ exports.useLocalStorage = useLocalStorage;
1972
2028
  exports.useMarginRatio = useMarginRatio;
1973
2029
  exports.useMarkPrice = useMarkPrice;
1974
2030
  exports.useMarkPricesStream = useMarkPricesStream;