@hyperix/hooks 0.3.0 → 0.3.1

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,5 +1,5 @@
1
1
  import { type UseInfiniteQueryOptions, type UseInfiniteQueryResult } from "@tanstack/react-query";
2
- import { type UseUserFillsOptions, type UserFill } from "./use-user-fills.js";
2
+ import { type UserFillsData, type UseUserFillsOptions, type UserFill } from "./use-user-fills.js";
3
3
  export type TradeHistory = UserFill & {
4
4
  displayCoin: string;
5
5
  quoteCoin: string;
@@ -27,6 +27,10 @@ export type InfiniteTradeHistoryPageParam = {
27
27
  startTime: number;
28
28
  endTime: number;
29
29
  };
30
+ type RawTradeHistoryPage = UserFillsData & {
31
+ startTime: number;
32
+ endTime: number;
33
+ };
30
34
  type InfiniteTradeHistoryQueryKey = [
31
35
  "infinite-trade-history",
32
36
  `0x${string}`,
@@ -34,7 +38,7 @@ type InfiniteTradeHistoryQueryKey = [
34
38
  number,
35
39
  number | undefined
36
40
  ];
37
- export type UseInfiniteTradeHistoryOptions = Omit<UseInfiniteQueryOptions<TradeHistoryPage, Error, InfiniteTradeHistoryData, InfiniteTradeHistoryQueryKey, InfiniteTradeHistoryPageParam>, "queryKey" | "queryFn" | "initialPageParam" | "getNextPageParam" | "select"> & {
41
+ export type UseInfiniteTradeHistoryOptions = Omit<UseInfiniteQueryOptions<RawTradeHistoryPage, Error, InfiniteTradeHistoryData, InfiniteTradeHistoryQueryKey, InfiniteTradeHistoryPageParam>, "queryKey" | "queryFn" | "initialPageParam" | "getNextPageParam" | "select"> & {
38
42
  aggregateByTime?: boolean;
39
43
  endTime?: number;
40
44
  pageDurationMs?: number;
@@ -8,6 +8,14 @@ const DEFAULT_TRADE_HISTORY_PAGE_DURATION_MS = 7 * 24 * 60 * 60 * 1000;
8
8
  function getFillKey(fill) {
9
9
  return `${fill.hash}-${fill.tid}-${fill.time}`;
10
10
  }
11
+ function sortFills(fills) {
12
+ return [...fills].sort((a, b) => {
13
+ if (a.time !== b.time) {
14
+ return b.time - a.time;
15
+ }
16
+ return b.tid - a.tid;
17
+ });
18
+ }
11
19
  function formatTradeHistoryFill(fill, spotPair) {
12
20
  const price = new Decimal(fill.px);
13
21
  if (!spotPair) {
@@ -44,14 +52,9 @@ function formatTradeHistoryFill(fill, spotPair) {
44
52
  };
45
53
  }
46
54
  function sortTradeHistory(fills) {
47
- return [...fills].sort((a, b) => {
48
- if (a.time !== b.time) {
49
- return b.time - a.time;
50
- }
51
- return b.tid - a.tid;
52
- });
55
+ return sortFills(fills);
53
56
  }
54
- function mergeTradeHistoryFills(pages, realtimeFills) {
57
+ function mergeFills(pages, realtimeFills) {
55
58
  const fillsByKey = new Map();
56
59
  for (const page of pages) {
57
60
  for (const fill of page.fills) {
@@ -61,7 +64,13 @@ function mergeTradeHistoryFills(pages, realtimeFills) {
61
64
  for (const fill of realtimeFills) {
62
65
  fillsByKey.set(getFillKey(fill), fill);
63
66
  }
64
- return sortTradeHistory([...fillsByKey.values()]);
67
+ return sortFills([...fillsByKey.values()]);
68
+ }
69
+ function formatTradeHistoryPage(page, symbolConverter) {
70
+ return {
71
+ ...page,
72
+ fills: sortTradeHistory(page.fills.map((fill) => formatTradeHistoryFill(fill, symbolConverter?.getSpotByPairId(fill.coin)))),
73
+ };
65
74
  }
66
75
  function flattenTradeHistoryPages(pages) {
67
76
  const fills = [];
@@ -111,16 +120,19 @@ export function useInfiniteTradeHistory(user, options = {}) {
111
120
  pageDurationMs,
112
121
  endTime,
113
122
  ];
114
- const selectTradeHistoryData = useMemo(() => (data) => ({
115
- pages: data.pages,
116
- user,
117
- fills: flattenTradeHistoryPages(data.pages),
118
- }), [user]);
123
+ const selectTradeHistoryData = useMemo(() => (data) => {
124
+ const pages = data.pages.map((page) => formatTradeHistoryPage(page, symbolConverter));
125
+ return {
126
+ pages,
127
+ user,
128
+ fills: flattenTradeHistoryPages(pages),
129
+ };
130
+ }, [symbolConverter, user]);
119
131
  useUserFills(user, {
120
132
  aggregateByTime,
121
133
  enabled: enabled && realtime,
122
134
  onUpdate: (event) => {
123
- const realtimeFills = sortTradeHistory(event.fills.map((fill) => formatTradeHistoryFill(fill, symbolConverter?.getSpotByPairId(fill.coin))));
135
+ const realtimeFills = sortFills(event.fills);
124
136
  if (realtimeFills.length === 0) {
125
137
  return;
126
138
  }
@@ -129,7 +141,7 @@ export function useInfiniteTradeHistory(user, options = {}) {
129
141
  if (!previousData || !latestPage) {
130
142
  return previousData;
131
143
  }
132
- const fills = mergeTradeHistoryFills([latestPage], realtimeFills);
144
+ const fills = mergeFills([latestPage], realtimeFills);
133
145
  return {
134
146
  ...previousData,
135
147
  pages: [
@@ -158,7 +170,7 @@ export function useInfiniteTradeHistory(user, options = {}) {
158
170
  endTime: pageParam.endTime,
159
171
  aggregateByTime,
160
172
  });
161
- const fills = sortTradeHistory(rawFills.map((fill) => formatTradeHistoryFill(fill, symbolConverter?.getSpotByPairId(fill.coin))));
173
+ const fills = sortFills(rawFills);
162
174
  if (pageParam.latest) {
163
175
  return getLatestPageFromFills(user, fills, pageParam.endTime, pageDurationMs);
164
176
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hyperix/hooks",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",