@lifi/perps-sdk-provider-hyperliquid 19.0.0 → 20.1.0

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.
Files changed (97) hide show
  1. package/README.md +56 -0
  2. package/dist/cjs/HyperliquidProvider.js.map +1 -1
  3. package/dist/cjs/services/getAccount.d.ts.map +1 -1
  4. package/dist/cjs/services/getAccount.js +12 -8
  5. package/dist/cjs/services/getAccount.js.map +1 -1
  6. package/dist/cjs/services/getActivity.d.ts.map +1 -1
  7. package/dist/cjs/services/getActivity.js +71 -45
  8. package/dist/cjs/services/getActivity.js.map +1 -1
  9. package/dist/cjs/services/getFills.d.ts.map +1 -1
  10. package/dist/cjs/services/getFills.js +30 -38
  11. package/dist/cjs/services/getFills.js.map +1 -1
  12. package/dist/cjs/services/getMarketSettings.d.ts +2 -2
  13. package/dist/cjs/services/getMarketSettings.d.ts.map +1 -1
  14. package/dist/cjs/services/getMarketSettings.js +8 -3
  15. package/dist/cjs/services/getMarketSettings.js.map +1 -1
  16. package/dist/cjs/services/historyPagination.d.ts +22 -0
  17. package/dist/cjs/services/historyPagination.d.ts.map +1 -0
  18. package/dist/cjs/services/historyPagination.js +125 -0
  19. package/dist/cjs/services/historyPagination.js.map +1 -0
  20. package/dist/cjs/types/ledger.d.ts +17 -1
  21. package/dist/cjs/types/ledger.d.ts.map +1 -1
  22. package/dist/cjs/types/ledger.js +10 -1
  23. package/dist/cjs/types/ledger.js.map +1 -1
  24. package/dist/cjs/utils/mapActivity.d.ts.map +1 -1
  25. package/dist/cjs/utils/mapActivity.js +41 -0
  26. package/dist/cjs/utils/mapActivity.js.map +1 -1
  27. package/dist/cjs/utils/withdrawableBalances.d.ts.map +1 -1
  28. package/dist/cjs/utils/withdrawableBalances.js +3 -1
  29. package/dist/cjs/utils/withdrawableBalances.js.map +1 -1
  30. package/dist/cjs/websocket/HyperliquidWsProvider.d.ts +6 -0
  31. package/dist/cjs/websocket/HyperliquidWsProvider.d.ts.map +1 -1
  32. package/dist/cjs/websocket/HyperliquidWsProvider.js +129 -37
  33. package/dist/cjs/websocket/HyperliquidWsProvider.js.map +1 -1
  34. package/dist/esm/HyperliquidProvider.js.map +1 -1
  35. package/dist/esm/services/getAccount.d.ts.map +1 -1
  36. package/dist/esm/services/getAccount.js +10 -9
  37. package/dist/esm/services/getAccount.js.map +1 -1
  38. package/dist/esm/services/getActivity.d.ts +3 -13
  39. package/dist/esm/services/getActivity.d.ts.map +1 -1
  40. package/dist/esm/services/getActivity.js +78 -66
  41. package/dist/esm/services/getActivity.js.map +1 -1
  42. package/dist/esm/services/getFills.d.ts +2 -14
  43. package/dist/esm/services/getFills.d.ts.map +1 -1
  44. package/dist/esm/services/getFills.js +32 -58
  45. package/dist/esm/services/getFills.js.map +1 -1
  46. package/dist/esm/services/getMarketSettings.d.ts +5 -3
  47. package/dist/esm/services/getMarketSettings.d.ts.map +1 -1
  48. package/dist/esm/services/getMarketSettings.js +13 -7
  49. package/dist/esm/services/getMarketSettings.js.map +1 -1
  50. package/dist/esm/services/historyPagination.d.ts +22 -0
  51. package/dist/esm/services/historyPagination.d.ts.map +1 -0
  52. package/dist/esm/services/historyPagination.js +121 -0
  53. package/dist/esm/services/historyPagination.js.map +1 -0
  54. package/dist/esm/types/ledger.d.ts +42 -1
  55. package/dist/esm/types/ledger.d.ts.map +1 -1
  56. package/dist/esm/types/ledger.js +17 -0
  57. package/dist/esm/types/ledger.js.map +1 -1
  58. package/dist/esm/utils/mapActivity.d.ts +1 -0
  59. package/dist/esm/utils/mapActivity.d.ts.map +1 -1
  60. package/dist/esm/utils/mapActivity.js +49 -1
  61. package/dist/esm/utils/mapActivity.js.map +1 -1
  62. package/dist/esm/utils/withdrawableBalances.d.ts +2 -1
  63. package/dist/esm/utils/withdrawableBalances.d.ts.map +1 -1
  64. package/dist/esm/utils/withdrawableBalances.js +5 -2
  65. package/dist/esm/utils/withdrawableBalances.js.map +1 -1
  66. package/dist/esm/websocket/HyperliquidWsProvider.d.ts +6 -0
  67. package/dist/esm/websocket/HyperliquidWsProvider.d.ts.map +1 -1
  68. package/dist/esm/websocket/HyperliquidWsProvider.js +131 -49
  69. package/dist/esm/websocket/HyperliquidWsProvider.js.map +1 -1
  70. package/dist/types/services/getAccount.d.ts.map +1 -1
  71. package/dist/types/services/getActivity.d.ts +3 -13
  72. package/dist/types/services/getActivity.d.ts.map +1 -1
  73. package/dist/types/services/getFills.d.ts +2 -14
  74. package/dist/types/services/getFills.d.ts.map +1 -1
  75. package/dist/types/services/getMarketSettings.d.ts +5 -3
  76. package/dist/types/services/getMarketSettings.d.ts.map +1 -1
  77. package/dist/types/services/historyPagination.d.ts +22 -0
  78. package/dist/types/services/historyPagination.d.ts.map +1 -0
  79. package/dist/types/types/ledger.d.ts +42 -1
  80. package/dist/types/types/ledger.d.ts.map +1 -1
  81. package/dist/types/utils/mapActivity.d.ts +1 -0
  82. package/dist/types/utils/mapActivity.d.ts.map +1 -1
  83. package/dist/types/utils/withdrawableBalances.d.ts +2 -1
  84. package/dist/types/utils/withdrawableBalances.d.ts.map +1 -1
  85. package/dist/types/websocket/HyperliquidWsProvider.d.ts +6 -0
  86. package/dist/types/websocket/HyperliquidWsProvider.d.ts.map +1 -1
  87. package/package.json +3 -3
  88. package/src/HyperliquidProvider.ts +1 -1
  89. package/src/services/getAccount.ts +22 -12
  90. package/src/services/getActivity.ts +138 -105
  91. package/src/services/getFills.ts +42 -95
  92. package/src/services/getMarketSettings.ts +20 -8
  93. package/src/services/historyPagination.ts +169 -0
  94. package/src/types/ledger.ts +61 -0
  95. package/src/utils/mapActivity.ts +56 -0
  96. package/src/utils/withdrawableBalances.ts +8 -3
  97. package/src/websocket/HyperliquidWsProvider.ts +141 -63
@@ -10,9 +10,9 @@ import type { HyperliquidContext } from '../context.js';
10
10
  */
11
11
  export interface GetActivityParams {
12
12
  address: Address;
13
- /** Maximum items returned; defaults to 50 and is capped at 200. */
13
+ /** Positive safe integer; defaults to 50 and is capped at 200. */
14
14
  limit?: number;
15
- /** Millisecond timestamp cursor; rows strictly older than it are returned. */
15
+ /** Opaque cursor returned in the previous page's `pagination.cursor`. */
16
16
  cursor?: string;
17
17
  /** Inclusive lower bound in milliseconds since epoch. */
18
18
  startTime?: number;
@@ -21,16 +21,6 @@ export interface GetActivityParams {
21
21
  /** Optional normalized activity-type filter applied after mapping. */
22
22
  type?: ActivityType[];
23
23
  }
24
- /**
25
- * Fetch a chronological activity feed (deposits, withdrawals, transfers,
26
- * liquidations, funding) for `address`. Combines results from Hyperliquid's
27
- * `userNonFundingLedgerUpdates`, `userFunding`, and `userFills` endpoints,
28
- * sorted newest-first.
29
- *
30
- * Cursor-based pagination uses the ms-since-epoch timestamp of the last item
31
- * on the current page.
32
- * @throws {PerpsError} On Hyperliquid REST error, network, or parsing failures.
33
- * @public
34
- */
24
+ /** Fetch retained activity newest-first with opaque cursors across inclusive time ranges. */
35
25
  export declare const getActivity: ({ client, apiUrl }: HyperliquidContext, params: GetActivityParams, options?: SDKRequestOptions) => Promise<ActivitiesResponse>;
36
26
  //# sourceMappingURL=getActivity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getActivity.d.ts","sourceRoot":"","sources":["../../../src/services/getActivity.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EACV,kBAAkB,EAInB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAMnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AA0BvD;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,sEAAsE;IACtE,IAAI,CAAC,EAAE,YAAY,EAAE,CAAA;CACtB;AAoHD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,GACtB,oBAAoB,kBAAkB,EACtC,QAAQ,iBAAiB,EACzB,UAAU,iBAAiB,KAC1B,OAAO,CAAC,kBAAkB,CAiE5B,CAAA"}
1
+ {"version":3,"file":"getActivity.d.ts","sourceRoot":"","sources":["../../../src/services/getActivity.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EACV,kBAAkB,EAInB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,YAAY,EAAkB,MAAM,mBAAmB,CAAA;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AA6BvD;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,sEAAsE;IACtE,IAAI,CAAC,EAAE,YAAY,EAAE,CAAA;CACtB;AA6KD,6FAA6F;AAC7F,eAAO,MAAM,WAAW,GACtB,oBAAoB,kBAAkB,EACtC,QAAQ,iBAAiB,EACzB,UAAU,iBAAiB,KAC1B,OAAO,CAAC,kBAAkB,CAmD5B,CAAA"}
@@ -1,9 +1,10 @@
1
- import { getAssetRegistry, getMarketRegistry, } from '@lifi/perps-sdk';
2
- import { ActivityType } from '@lifi/perps-types';
3
- import { DEFAULT_HISTORY_LIMIT, MAX_HISTORY_LIMIT, PROVIDER_KEY, } from '../constants.js';
4
- import { isCollateralTransferDelta, isDepositDelta, isLiquidationDelta, isSendAssetDelta, isSpotTransferDelta, isVaultTransferDelta, isWithdrawDelta, } from '../types/index.js';
1
+ import { getAssetRegistry, getMarketRegistry, PerpsError, } from '@lifi/perps-sdk';
2
+ import { ActivityType, PerpsErrorCode } from '@lifi/perps-types';
3
+ import { PROVIDER_KEY } from '../constants.js';
4
+ import { isBorrowLendDelta, isCollateralTransferDelta, isCStakingTransferDelta, isDepositDelta, isLiquidationDelta, isSendAssetDelta, isSpotTransferDelta, isVaultTransferDelta, isWithdrawDelta, } from '../types/index.js';
5
5
  import { mapFundingActivity, mapLedgerEntry, mapLiquidationFills, } from '../utils/index.js';
6
6
  import { hlInfoOptions, infoRequest, } from '../utils/infoClient.js';
7
+ import { getHistoryLimit, historyPage } from './historyPagination.js';
7
8
  const MARKET_BEARING_TYPES = new Set([
8
9
  ActivityType.FUNDING,
9
10
  ActivityType.LIQUIDATION,
@@ -14,25 +15,66 @@ const ASSET_BEARING_TYPES = new Set([
14
15
  ActivityType.TRANSFER,
15
16
  ]);
16
17
  const needsMarkets = (typeFilter) => !typeFilter || typeFilter.some((t) => MARKET_BEARING_TYPES.has(t));
17
- const fetchActivityData = async (apiUrl, typeFilter, timeParams, assetRegistry, resolveMarket, options) => {
18
+ const fetchLiquidationHistory = async (apiUrl, user, startTime, endTime, resolveMarket, options) => {
19
+ const retained = new Map();
20
+ while (startTime <= endTime) {
21
+ options?.signal?.throwIfAborted();
22
+ const fills = await infoRequest(apiUrl, { type: 'userFillsByTime', user, startTime, endTime }, options);
23
+ options?.signal?.throwIfAborted();
24
+ let latest = startTime;
25
+ for (const fill of fills) {
26
+ retained.set(fill.tid, fill);
27
+ latest = Math.max(latest, fill.time);
28
+ }
29
+ if (fills.length < 2000 || retained.size >= 10000) {
30
+ break;
31
+ }
32
+ if (latest === startTime) {
33
+ throw new PerpsError(PerpsErrorCode.ThirdPartyError, 'Hyperliquid fills saturate a single millisecond; liquidation history cannot be paginated safely');
34
+ }
35
+ // Inclusive overlap retains all same-time fills at the venue page boundary.
36
+ startTime = latest;
37
+ }
38
+ const queried = user.toLowerCase();
39
+ const fills = [...retained.values()].filter((fill) => fill.liquidation?.liquidatedUser.toLowerCase() === queried);
40
+ if (fills.length === 0) {
41
+ return [];
42
+ }
43
+ const hashes = new Set();
44
+ let firstTime = Infinity;
45
+ let lastTime = 0;
46
+ for (const fill of fills) {
47
+ if (fill.hash !== undefined) {
48
+ hashes.add(fill.hash);
49
+ }
50
+ firstTime = Math.min(firstTime, fill.time);
51
+ lastTime = Math.max(lastTime, fill.time);
52
+ }
53
+ // Exclusions must cover the entire order, not the current SDK page's ledger window.
54
+ const ledger = await historyPage({ startTime: firstTime, endTime: lastTime }, Number.MAX_SAFE_INTEGER, async (startTime, endTime) => {
55
+ const updates = await infoRequest(apiUrl, { type: 'userNonFundingLedgerUpdates', user, startTime, endTime }, options);
56
+ return {
57
+ items: updates.filter((entry) => isLiquidationDelta(entry.delta) && hashes.has(entry.hash)),
58
+ saturated: updates.length >= 500,
59
+ };
60
+ }, (entry) => ({ time: entry.time, key: entry.hash }), options?.signal);
61
+ return mapLiquidationFills(fills, PROVIDER_KEY, user, resolveMarket, new Set(ledger.items.map((entry) => entry.hash)));
62
+ };
63
+ const fetchActivityData = async (apiUrl, typeFilter, timeParams, assetRegistry, resolveMarket, liquidationHistory, options) => {
18
64
  const needLedger = !typeFilter || typeFilter.some((t) => t !== ActivityType.FUNDING);
19
65
  const needFunding = !typeFilter || typeFilter.includes(ActivityType.FUNDING);
20
- // A liquidation executed as a market order reaches the account as fills
21
- // with a `liquidation` field and never as a ledger `liquidation` delta.
22
- const needLiquidationFills = !typeFilter || typeFilter.includes(ActivityType.LIQUIDATION);
23
- const [ledgerUpdates, fundingUpdates, fills] = await Promise.all([
66
+ const [ledgerUpdates, fundingUpdates, liquidations] = await Promise.all([
24
67
  needLedger
25
68
  ? infoRequest(apiUrl, { type: 'userNonFundingLedgerUpdates', ...timeParams }, options)
26
69
  : Promise.resolve([]),
27
70
  needFunding
28
71
  ? infoRequest(apiUrl, { type: 'userFunding', ...timeParams }, options)
29
72
  : Promise.resolve([]),
30
- needLiquidationFills
31
- ? infoRequest(apiUrl, timeParams.startTime === undefined
32
- ? { type: 'userFills', user: timeParams.user }
33
- : { type: 'userFillsByTime', ...timeParams }, options)
34
- : Promise.resolve([]),
73
+ liquidationHistory,
35
74
  ]);
75
+ if (ledgerUpdates.length >= 500 || fundingUpdates.length >= 500) {
76
+ return { items: [], saturated: true };
77
+ }
36
78
  const ledgerItems = ledgerUpdates.flatMap((entry) => {
37
79
  if (typeFilter !== undefined &&
38
80
  ((isDepositDelta(entry.delta) &&
@@ -43,7 +85,9 @@ const fetchActivityData = async (apiUrl, typeFilter, timeParams, assetRegistry,
43
85
  (isSpotTransferDelta(entry.delta) ||
44
86
  isSendAssetDelta(entry.delta) ||
45
87
  isCollateralTransferDelta(entry.delta) ||
46
- isVaultTransferDelta(entry.delta))))) {
88
+ isVaultTransferDelta(entry.delta) ||
89
+ isCStakingTransferDelta(entry.delta) ||
90
+ isBorrowLendDelta(entry.delta))))) {
47
91
  return [];
48
92
  }
49
93
  const item = mapLedgerEntry(entry, PROVIDER_KEY, timeParams.user, assetRegistry, resolveMarket);
@@ -53,29 +97,15 @@ const fetchActivityData = async (apiUrl, typeFilter, timeParams, assetRegistry,
53
97
  const item = mapFundingActivity(entry, PROVIDER_KEY, resolveMarket);
54
98
  return item === null ? [] : [item];
55
99
  });
56
- const ledgerLiquidationHashes = new Set(ledgerUpdates
57
- .filter((entry) => isLiquidationDelta(entry.delta))
58
- .map((entry) => entry.hash));
59
- const liquidationItems = mapLiquidationFills(fills, PROVIDER_KEY, timeParams.user, resolveMarket, ledgerLiquidationHashes);
60
- const merged = [...ledgerItems, ...fundingItems, ...liquidationItems].sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
61
- if (!typeFilter) {
62
- return merged;
63
- }
64
- const typeSet = new Set(typeFilter);
65
- return merged.filter((item) => typeSet.has(item.type));
100
+ const merged = [...ledgerItems, ...fundingItems, ...(liquidations ?? [])];
101
+ const items = typeFilter
102
+ ? merged.filter((item) => typeFilter.includes(item.type))
103
+ : merged;
104
+ return { items, saturated: false };
66
105
  };
67
- /**
68
- * Fetch a chronological activity feed (deposits, withdrawals, transfers,
69
- * liquidations, funding) for `address`. Combines results from Hyperliquid's
70
- * `userNonFundingLedgerUpdates`, `userFunding`, and `userFills` endpoints,
71
- * sorted newest-first.
72
- *
73
- * Cursor-based pagination uses the ms-since-epoch timestamp of the last item
74
- * on the current page.
75
- * @throws {PerpsError} On Hyperliquid REST error, network, or parsing failures.
76
- * @public
77
- */
106
+ /** Fetch retained activity newest-first with opaque cursors across inclusive time ranges. */
78
107
  export const getActivity = async ({ client, apiUrl }, params, options) => {
108
+ const limit = getHistoryLimit(params.limit);
79
109
  const registry = getMarketRegistry(client, PROVIDER_KEY);
80
110
  // Only funding and liquidation rows carry a market, so a Ledger-only
81
111
  // request must not pull the market list.
@@ -88,35 +118,17 @@ export const getActivity = async ({ client, apiUrl }, params, options) => {
88
118
  await assetRegistry.sync();
89
119
  }
90
120
  const infoOpts = hlInfoOptions(client, options);
91
- const limit = Math.min(params.limit ?? DEFAULT_HISTORY_LIMIT, MAX_HISTORY_LIMIT);
92
- const timeParams = {
93
- user: params.address,
94
- ...(params.startTime !== undefined || params.endTime !== undefined
95
- ? { startTime: params.startTime ?? 0 }
96
- : {}),
97
- ...(params.endTime === undefined ? {} : { endTime: params.endTime }),
98
- };
99
- // `get`, not `require`: a coin the backend market list does not hold drops
100
- // only its own row instead of rejecting the whole feed. The registry warns
101
- // once per unresolved id. A delisted market still resolves, so its rows stay.
102
- const merged = await fetchActivityData(apiUrl, params.type, timeParams, assetRegistry, (coin) => registry.get(coin), infoOpts);
103
- // Drop boundary items so the next page does not return the cursor row twice.
104
- const filtered = params.cursor === undefined
105
- ? merged
106
- : merged.filter((item) => new Date(item.timestamp).getTime() <
107
- Number.parseInt(params.cursor, 10));
108
- const hasMore = filtered.length > limit;
109
- const items = filtered.slice(0, limit);
110
- return {
111
- provider: PROVIDER_KEY,
112
- items,
113
- pagination: {
114
- limit,
115
- hasMore,
116
- cursor: items.length > 0
117
- ? String(new Date(items[items.length - 1].timestamp).getTime())
118
- : undefined,
119
- },
120
- };
121
+ const needLiquidationFills = !params.type || params.type.includes(ActivityType.LIQUIDATION);
122
+ let liquidationHistory;
123
+ const page = await historyPage(params, limit, (startTime, endTime, snapshotEnd) => {
124
+ if (needLiquidationFills && liquidationHistory === undefined) {
125
+ liquidationHistory = fetchLiquidationHistory(apiUrl, params.address, params.startTime ?? 0, snapshotEnd, (coin) => registry.get(coin), infoOpts);
126
+ }
127
+ return fetchActivityData(apiUrl, params.type, { user: params.address, startTime, endTime }, assetRegistry, (coin) => registry.get(coin), liquidationHistory, infoOpts);
128
+ }, (item) => ({
129
+ time: new Date(item.timestamp).getTime(),
130
+ key: `${item.type}:${item.id}`,
131
+ }), options?.signal);
132
+ return { provider: PROVIDER_KEY, ...page };
121
133
  };
122
134
  //# sourceMappingURL=getActivity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getActivity.js","sourceRoot":"","sources":["../../../src/services/getActivity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getActivity.js","sourceRoot":"","sources":["../../../src/services/getActivity.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ import type { HyperliquidContext } from '../context.js';
9
9
  */
10
10
  export interface GetFillsParams {
11
11
  address: Address;
12
- /** Maximum items returned; defaults to 50 and is capped at 200. */
12
+ /** Positive safe integer; defaults to 50 and is capped at 200. */
13
13
  limit?: number;
14
14
  /** Opaque cursor returned in the previous page's `pagination.cursor`. */
15
15
  cursor?: string;
@@ -18,18 +18,6 @@ export interface GetFillsParams {
18
18
  /** Inclusive upper bound in milliseconds; selects `userFillsByTime`. */
19
19
  endTime?: number;
20
20
  }
21
- /**
22
- * Fetch the user's fills history. When `startTime` or `endTime` is provided,
23
- * Hyperliquid's `userFillsByTime` endpoint is used; otherwise the unbounded
24
- * `userFills` endpoint returns the full history. The backend's enriched asset
25
- * list supplies the display fields; only the fills endpoint is read direct
26
- * from HL.
27
- *
28
- * The response is sorted (time desc, `tid` as tiebreaker) before pagination —
29
- * see {@link compareFillsDesc}. The cursor encodes the last returned fill's
30
- * `(time, tid)`; the next page keeps fills that sort strictly after it.
31
- * @throws {PerpsError} On Hyperliquid REST error, network, or parsing failures.
32
- * @public
33
- */
21
+ /** Fetch retained fills newest-first, using opaque cursors across inclusive time ranges. */
34
22
  export declare const getFills: ({ client, apiUrl }: HyperliquidContext, params: GetFillsParams, options?: SDKRequestOptions) => Promise<FillsResponse>;
35
23
  //# sourceMappingURL=getFills.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getFills.d.ts","sourceRoot":"","sources":["../../../src/services/getFills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAC3E,OAAO,KAAK,EAAQ,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAMnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AASvD;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAA;IAChB,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAoBD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,QAAQ,GACnB,oBAAoB,kBAAkB,EACtC,QAAQ,cAAc,EACtB,UAAU,iBAAiB,KAC1B,OAAO,CAAC,aAAa,CA8DvB,CAAA"}
1
+ {"version":3,"file":"getFills.d.ts","sourceRoot":"","sources":["../../../src/services/getFills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAC3E,OAAO,KAAK,EAAQ,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAMvD;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAA;IAChB,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,4FAA4F;AAC5F,eAAO,MAAM,QAAQ,GACnB,oBAAoB,kBAAkB,EACtC,QAAQ,cAAc,EACtB,UAAU,iBAAiB,KAC1B,OAAO,CAAC,aAAa,CA8CvB,CAAA"}
@@ -1,68 +1,42 @@
1
1
  import { getMarketRegistry } from '@lifi/perps-sdk';
2
- import { DEFAULT_HISTORY_LIMIT, MAX_HISTORY_LIMIT, PROVIDER_KEY, } from '../constants.js';
2
+ import { PROVIDER_KEY } from '../constants.js';
3
3
  import { assetIsOutcome, mapFill } from '../utils/index.js';
4
4
  import { hlInfoOptions, infoRequest } from '../utils/infoClient.js';
5
- // HL's docs specify neither newest-first ordering nor monotonic `tid` for
6
- // `userFills`/`userFillsByTime`, so pagination can't rely on upstream order —
7
- // it must impose its own (time desc, tid desc as tiebreaker for same-time fills).
8
- const compareFillsDesc = (a, b) => b.time - a.time || b.tid - a.tid;
9
- const encodeCursor = (fill) => `${fill.time}:${fill.tid}`;
10
- const decodeCursor = (cursor) => {
11
- const [time, tid] = cursor.split(':').map(Number);
12
- return { time, tid };
13
- };
14
- /**
15
- * Fetch the user's fills history. When `startTime` or `endTime` is provided,
16
- * Hyperliquid's `userFillsByTime` endpoint is used; otherwise the unbounded
17
- * `userFills` endpoint returns the full history. The backend's enriched asset
18
- * list supplies the display fields; only the fills endpoint is read direct
19
- * from HL.
20
- *
21
- * The response is sorted (time desc, `tid` as tiebreaker) before pagination —
22
- * see {@link compareFillsDesc}. The cursor encodes the last returned fill's
23
- * `(time, tid)`; the next page keeps fills that sort strictly after it.
24
- * @throws {PerpsError} On Hyperliquid REST error, network, or parsing failures.
25
- * @public
26
- */
5
+ import { getHistoryLimit, historyPage } from './historyPagination.js';
6
+ /** Fetch retained fills newest-first, using opaque cursors across inclusive time ranges. */
27
7
  export const getFills = async ({ client, apiUrl }, params, options) => {
8
+ const limit = getHistoryLimit(params.limit);
28
9
  const registry = getMarketRegistry(client, PROVIDER_KEY);
29
10
  await registry.sync();
30
11
  const infoOpts = hlInfoOptions(client, options);
31
- const limit = Math.min(params.limit ?? DEFAULT_HISTORY_LIMIT, MAX_HISTORY_LIMIT);
32
- const useByTime = params.startTime !== undefined || params.endTime !== undefined;
33
- const allFills = useByTime
34
- ? await infoRequest(apiUrl, {
35
- type: 'userFillsByTime',
36
- user: params.address,
37
- startTime: params.startTime ?? 0,
38
- ...(params.endTime !== undefined ? { endTime: params.endTime } : {}),
39
- }, infoOpts)
40
- : await infoRequest(apiUrl, { type: 'userFills', user: params.address }, infoOpts);
41
- const sorted = [...allFills].sort(compareFillsDesc);
42
- const filtered = params.cursor === undefined
43
- ? sorted
44
- : sorted.filter((f) => compareFillsDesc(f, decodeCursor(params.cursor)) > 0);
45
- const hasMore = filtered.length > limit;
46
- const page = filtered.slice(0, limit);
47
- // `get`, not `require`: a coin the backend market list does not hold drops
48
- // only its own row instead of rejecting the whole page. The registry warns
49
- // once per unresolved id. A delisted market still resolves, so its rows stay.
50
- const items = page.flatMap((f) => {
51
- if (assetIsOutcome(f.coin)) {
52
- return [];
12
+ let useRecent = params.cursor === undefined &&
13
+ params.startTime === undefined &&
14
+ params.endTime === undefined;
15
+ const page = await historyPage(params, limit, async (startTime, endTime) => {
16
+ const fills = await infoRequest(apiUrl, useRecent
17
+ ? { type: 'userFills', user: params.address }
18
+ : {
19
+ type: 'userFillsByTime',
20
+ user: params.address,
21
+ startTime,
22
+ endTime,
23
+ }, infoOpts);
24
+ useRecent = false;
25
+ if (fills.length >= 2000) {
26
+ return { items: [], saturated: true };
53
27
  }
54
- const market = registry.get(f.coin);
55
- return market === undefined ? [] : [mapFill(f, market)];
56
- });
57
- const lastPageFill = page[page.length - 1];
58
- return {
59
- provider: PROVIDER_KEY,
60
- items,
61
- pagination: {
62
- limit,
63
- hasMore,
64
- cursor: lastPageFill ? encodeCursor(lastPageFill) : undefined,
65
- },
66
- };
28
+ const items = fills.flatMap((fill) => {
29
+ if (assetIsOutcome(fill.coin)) {
30
+ return [];
31
+ }
32
+ const market = registry.get(fill.coin);
33
+ return market === undefined ? [] : [mapFill(fill, market)];
34
+ });
35
+ return { items, saturated: false };
36
+ }, (fill) => ({
37
+ time: new Date(fill.createdAt).getTime(),
38
+ key: Number(fill.id),
39
+ }), options?.signal);
40
+ return { provider: PROVIDER_KEY, ...page };
67
41
  };
68
42
  //# sourceMappingURL=getFills.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getFills.js","sourceRoot":"","sources":["../../../src/services/getFills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getFills.js","sourceRoot":"","sources":["../../../src/services/getFills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA0B,MAAM,iBAAiB,CAAA;AAG3E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAG9C,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAmBrE,4FAA4F;AAC5F,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,EAAE,MAAM,EAAE,MAAM,EAAsB,EACtC,MAAsB,EACtB,OAA2B,EACH,EAAE;IAC1B,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC3C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACxD,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IACrB,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAE/C,IAAI,SAAS,GACX,MAAM,CAAC,MAAM,KAAK,SAAS;QAC3B,MAAM,CAAC,SAAS,KAAK,SAAS;QAC9B,MAAM,CAAC,OAAO,KAAK,SAAS,CAAA;IAC9B,MAAM,IAAI,GAAG,MAAM,WAAW,CAC5B,MAAM,EACN,KAAK,EACL,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,MAAM,WAAW,CAC7B,MAAM,EACN,SAAS;YACP,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE;YAC7C,CAAC,CAAC;gBACE,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE,MAAM,CAAC,OAAO;gBACpB,SAAS;gBACT,OAAO;aACR,EACL,QAAQ,CACT,CAAA;QACD,SAAS,GAAG,KAAK,CAAA;QACjB,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;YACzB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAA;QACvC,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAU,EAAE;YAC3C,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B,OAAO,EAAE,CAAA;YACX,CAAC;YACD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACtC,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;QAC5D,CAAC,CAAC,CAAA;QACF,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;IACpC,CAAC,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACT,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;QACxC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;KACrB,CAAC,EACF,OAAO,EAAE,MAAM,CAChB,CAAA;IACD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI,EAAE,CAAA;AAC5C,CAAC,CAAA"}
@@ -1,4 +1,4 @@
1
- import type { SDKRequestOptions } from '@lifi/perps-sdk';
1
+ import { type SDKRequestOptions } from '@lifi/perps-sdk';
2
2
  import { type MarketRef, type MarketSettings } from '@lifi/perps-types';
3
3
  import type { Address } from 'viem';
4
4
  import type { HyperliquidContext } from '../context.js';
@@ -14,8 +14,10 @@ export interface GetMarketSettingsParams {
14
14
  /**
15
15
  * The user's venue-stored margin mode and leverage for one perps market,
16
16
  * read from `activeAssetData` — present whether or not a position is open.
17
- * @throws {PerpsError} On Hyperliquid REST error, network, or parsing failures.
17
+ * @throws {PerpsError} `ValidationError` for a spot market; `SDKError` when
18
+ * the response carries no positive leverage; any other `PerpsError` on
19
+ * Hyperliquid REST error, network, or parsing failures.
18
20
  * @public
19
21
  */
20
- export declare const getMarketSettings: (context: HyperliquidContext, params: GetMarketSettingsParams, options?: SDKRequestOptions) => Promise<MarketSettings | undefined>;
22
+ export declare const getMarketSettings: (context: HyperliquidContext, params: GetMarketSettingsParams, options?: SDKRequestOptions) => Promise<MarketSettings>;
21
23
  //# sourceMappingURL=getMarketSettings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getMarketSettings.d.ts","sourceRoot":"","sources":["../../../src/services/getMarketSettings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAGvD;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,SAAS,CAAA;CAClB;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAC5B,SAAS,kBAAkB,EAC3B,QAAQ,uBAAuB,EAC/B,UAAU,iBAAiB,KAC1B,OAAO,CAAC,cAAc,GAAG,SAAS,CAoBpC,CAAA"}
1
+ {"version":3,"file":"getMarketSettings.d.ts","sourceRoot":"","sources":["../../../src/services/getMarketSettings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACpE,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,cAAc,EAEpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAGvD;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,SAAS,CAAA;CAClB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,GAC5B,SAAS,kBAAkB,EAC3B,QAAQ,uBAAuB,EAC/B,UAAU,iBAAiB,KAC1B,OAAO,CAAC,cAAc,CA6BxB,CAAA"}
@@ -1,21 +1,27 @@
1
- import { MarginMode, } from '@lifi/perps-types';
2
- import { SPOT_MARKET_ID } from '../constants.js';
1
+ import { PerpsError } from '@lifi/perps-sdk';
2
+ import { MarginMode, PerpsErrorCode, } from '@lifi/perps-types';
3
+ import { PROVIDER_KEY, SPOT_MARKET_ID } from '../constants.js';
3
4
  import { fetchActiveAssetData } from './activeAssetData.js';
4
5
  /**
5
6
  * The user's venue-stored margin mode and leverage for one perps market,
6
7
  * read from `activeAssetData` — present whether or not a position is open.
7
- * @throws {PerpsError} On Hyperliquid REST error, network, or parsing failures.
8
+ * @throws {PerpsError} `ValidationError` for a spot market; `SDKError` when
9
+ * the response carries no positive leverage; any other `PerpsError` on
10
+ * Hyperliquid REST error, network, or parsing failures.
8
11
  * @public
9
12
  */
10
13
  export const getMarketSettings = async (context, params, options) => {
11
- // Spot markets carry no leverage state on the venue.
12
14
  if (params.market.categoryId === SPOT_MARKET_ID) {
13
- return undefined;
15
+ const error = new PerpsError(PerpsErrorCode.ValidationError, `Hyperliquid market '${params.market.marketId}' is a spot market and carries no leverage setting`);
16
+ error.tool = PROVIDER_KEY;
17
+ throw error;
14
18
  }
15
19
  const data = await fetchActiveAssetData(context, params.address, params.market.marketId, options);
16
20
  const leverage = data.leverage;
17
- if (!leverage) {
18
- return undefined;
21
+ if (!leverage || !(leverage.value > 0)) {
22
+ const error = new PerpsError(PerpsErrorCode.SDKError, `Hyperliquid returned no leverage for market '${params.market.marketId}'`);
23
+ error.tool = PROVIDER_KEY;
24
+ throw error;
19
25
  }
20
26
  return {
21
27
  marginMode: leverage.type === 'isolated' ? MarginMode.ISOLATED : MarginMode.CROSS,
@@ -1 +1 @@
1
- {"version":3,"file":"getMarketSettings.js","sourceRoot":"","sources":["../../../src/services/getMarketSettings.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,GAGX,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEhD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAY3D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,OAA2B,EAC3B,MAA+B,EAC/B,OAA2B,EACU,EAAE;IACvC,qDAAqD;IACrD,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,KAAK,cAAc,EAAE,CAAC;QAChD,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,oBAAoB,CACrC,OAAO,EACP,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,MAAM,CAAC,QAAQ,EACtB,OAAO,CACR,CAAA;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;IAC9B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO;QACL,UAAU,EACR,QAAQ,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK;QACvE,QAAQ,EAAE,QAAQ,CAAC,KAAK;KACzB,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"getMarketSettings.js","sourceRoot":"","sources":["../../../src/services/getMarketSettings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA0B,MAAM,iBAAiB,CAAA;AACpE,OAAO,EACL,UAAU,EAGV,cAAc,GACf,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAE9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAY3D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,OAA2B,EAC3B,MAA+B,EAC/B,OAA2B,EACF,EAAE;IAC3B,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,KAAK,cAAc,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,UAAU,CAC1B,cAAc,CAAC,eAAe,EAC9B,uBAAuB,MAAM,CAAC,MAAM,CAAC,QAAQ,oDAAoD,CAClG,CAAA;QACD,KAAK,CAAC,IAAI,GAAG,YAAY,CAAA;QACzB,MAAM,KAAK,CAAA;IACb,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,oBAAoB,CACrC,OAAO,EACP,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,MAAM,CAAC,QAAQ,EACtB,OAAO,CACR,CAAA;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;IAC9B,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,UAAU,CAC1B,cAAc,CAAC,QAAQ,EACvB,gDAAgD,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG,CAC1E,CAAA;QACD,KAAK,CAAC,IAAI,GAAG,YAAY,CAAA;QACzB,MAAM,KAAK,CAAA;IACb,CAAC;IACD,OAAO;QACL,UAAU,EACR,QAAQ,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK;QACvE,QAAQ,EAAE,QAAQ,CAAC,KAAK;KACzB,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,22 @@
1
+ type HistoryKey = string | number;
2
+ export declare const getHistoryLimit: (limit?: number) => number;
3
+ export declare function historyPage<T>(params: {
4
+ startTime?: number;
5
+ endTime?: number;
6
+ cursor?: string;
7
+ }, limit: number, fetchWindow: (startTime: number, endTime: number, snapshotEnd: number) => Promise<{
8
+ items: T[];
9
+ saturated: boolean;
10
+ }>, identify: (item: T) => {
11
+ time: number;
12
+ key: HistoryKey;
13
+ }, signal?: AbortSignal): Promise<{
14
+ items: T[];
15
+ pagination: {
16
+ limit: number;
17
+ hasMore: boolean;
18
+ cursor?: string;
19
+ };
20
+ }>;
21
+ export {};
22
+ //# sourceMappingURL=historyPagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"historyPagination.d.ts","sourceRoot":"","sources":["../../../src/services/historyPagination.ts"],"names":[],"mappings":"AAIA,KAAK,UAAU,GAAG,MAAM,GAAG,MAAM,CAAA;AAiBjC,eAAO,MAAM,eAAe,GAAI,cAA6B,KAAG,MAQ/D,CAAA;AAmCD,wBAAsB,WAAW,CAAC,CAAC,EACjC,MAAM,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EACjE,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,CACX,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,KAChB,OAAO,CAAC;IAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,EAChD,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,UAAU,CAAA;CAAE,EACxD,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC;IACT,KAAK,EAAE,CAAC,EAAE,CAAA;IACV,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACjE,CAAC,CA2FD"}