@hyperix/hooks 0.1.11 → 0.1.13

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.
@@ -1,6 +1,13 @@
1
1
  import { type UseSubscribeState } from "@outofgas/react-stream";
2
2
  import type { OpenOrdersEvent } from "@nktkas/hyperliquid/api/subscription";
3
- export type OpenOrder = OpenOrdersEvent["orders"][number];
3
+ type RawOpenOrder = OpenOrdersEvent["orders"][number];
4
+ export type OpenOrderDirection = "Buy" | "Sell" | "Long" | "Short" | "Close Long" | "Close Short";
5
+ export type OpenOrder = RawOpenOrder & {
6
+ isSpot: boolean;
7
+ displayCoin: string;
8
+ direction: OpenOrderDirection;
9
+ assetId: number | undefined;
10
+ };
4
11
  export type OpenOrdersData = {
5
12
  dex: string;
6
13
  user: `0x${string}`;
@@ -12,3 +19,4 @@ export type UseOpenOrdersOptions = {
12
19
  onUpdate?: (event: OpenOrdersEvent) => void;
13
20
  };
14
21
  export declare function useOpenOrders(user: `0x${string}`, options?: UseOpenOrdersOptions): UseSubscribeState<OpenOrdersData>;
22
+ export {};
@@ -1,27 +1,58 @@
1
+ import { useMemo } from "react";
1
2
  import { useSubscribe } from "@outofgas/react-stream";
2
3
  import { wsClient } from "./config/hl.js";
4
+ import { useSymbolConverter } from "./use-symbol-converter.js";
3
5
  const DEFAULT_DEX = "ALL_DEXS";
4
6
  function compareOpenOrders(left, right) {
5
7
  return right.timestamp - left.timestamp;
6
8
  }
7
- function formatOpenOrders(event) {
9
+ function formatOpenOrderDirection(order, isSpot) {
10
+ if (order.reduceOnly) {
11
+ return order.side === "A" ? "Close Long" : "Close Short";
12
+ }
13
+ if (order.side === "B") {
14
+ return isSpot ? "Buy" : "Long";
15
+ }
16
+ return isSpot ? "Sell" : "Short";
17
+ }
18
+ function formatOpenOrder(order, displayCoin, assetId) {
19
+ const isSpot = Boolean(displayCoin);
20
+ return {
21
+ ...order,
22
+ isSpot,
23
+ displayCoin: displayCoin ?? order.coin,
24
+ direction: formatOpenOrderDirection(order, isSpot),
25
+ assetId,
26
+ };
27
+ }
28
+ function formatOpenOrders(data, symbolConverter) {
8
29
  return {
9
- dex: event.dex,
10
- user: event.user,
11
- orders: [...event.orders].sort(compareOpenOrders),
30
+ dex: data.dex,
31
+ user: data.user,
32
+ orders: [...data.orders]
33
+ .map((order) => {
34
+ const displayCoin = symbolConverter?.getSpotByPairId(order.coin);
35
+ return formatOpenOrder(order, displayCoin, symbolConverter?.getAssetId(displayCoin ?? order.coin));
36
+ })
37
+ .sort(compareOpenOrders),
12
38
  };
13
39
  }
14
40
  export function useOpenOrders(user, options = {}) {
15
41
  const { dex = DEFAULT_DEX, enabled: enabledOverride, onUpdate } = options;
16
42
  const enabled = enabledOverride ?? Boolean(user);
17
- return useSubscribe({
43
+ const symbolConverter = useSymbolConverter();
44
+ const openOrdersState = useSubscribe({
18
45
  key: ["open-orders", user, dex ?? ""],
19
46
  enabled,
20
47
  subscribe: async ({ onData, onError }) => {
21
48
  const subscription = await wsClient.openOrders({ user, dex }, (event) => {
22
49
  try {
23
50
  onUpdate?.(event);
24
- onData(formatOpenOrders(event));
51
+ onData({
52
+ dex: event.dex,
53
+ user: event.user,
54
+ orders: event.orders,
55
+ });
25
56
  }
26
57
  catch (error) {
27
58
  onError(error instanceof Error
@@ -34,4 +65,14 @@ export function useOpenOrders(user, options = {}) {
34
65
  };
35
66
  },
36
67
  });
68
+ const data = useMemo(() => {
69
+ if (!openOrdersState.data) {
70
+ return undefined;
71
+ }
72
+ return formatOpenOrders(openOrdersState.data, symbolConverter);
73
+ }, [openOrdersState.data, symbolConverter]);
74
+ return {
75
+ ...openOrdersState,
76
+ data,
77
+ };
37
78
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hyperix/hooks",
3
- "version": "0.1.11",
3
+ "version": "0.1.13",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",