@nadohq/indexer-client 0.15.0 → 0.18.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 (155) hide show
  1. package/dist/CandlestickPeriod-1DtcEiOb.d.ts +15 -0
  2. package/dist/CandlestickPeriod-1DtcEiOb.d.ts.map +1 -0
  3. package/dist/CandlestickPeriod-D3_IoSev.d.cts +15 -0
  4. package/dist/CandlestickPeriod-D3_IoSev.d.cts.map +1 -0
  5. package/dist/IndexerBaseClient-3KfzA2ph.cjs +639 -0
  6. package/dist/IndexerBaseClient-3KfzA2ph.cjs.map +1 -0
  7. package/dist/IndexerBaseClient.cjs +3 -788
  8. package/dist/IndexerBaseClient.d.cts +223 -229
  9. package/dist/IndexerBaseClient.d.cts.map +1 -0
  10. package/dist/IndexerBaseClient.d.ts +223 -229
  11. package/dist/IndexerBaseClient.d.ts.map +1 -0
  12. package/dist/IndexerBaseClient.js +601 -783
  13. package/dist/IndexerBaseClient.js.map +1 -1
  14. package/dist/IndexerClient.cjs +275 -381
  15. package/dist/IndexerClient.cjs.map +1 -1
  16. package/dist/IndexerClient.d.cts +32 -43
  17. package/dist/IndexerClient.d.cts.map +1 -0
  18. package/dist/IndexerClient.d.ts +32 -43
  19. package/dist/IndexerClient.d.ts.map +1 -0
  20. package/dist/IndexerClient.js +273 -362
  21. package/dist/IndexerClient.js.map +1 -1
  22. package/dist/IndexerEventType-B-uXsf-a.d.cts +5 -0
  23. package/dist/IndexerEventType-B-uXsf-a.d.cts.map +1 -0
  24. package/dist/IndexerEventType-DCLkSlgR.d.ts +5 -0
  25. package/dist/IndexerEventType-DCLkSlgR.d.ts.map +1 -0
  26. package/dist/IndexerLeaderboardType-Ck12QVWR.d.cts +13 -0
  27. package/dist/IndexerLeaderboardType-Ck12QVWR.d.cts.map +1 -0
  28. package/dist/IndexerLeaderboardType-DAKw2tfI.d.ts +13 -0
  29. package/dist/IndexerLeaderboardType-DAKw2tfI.d.ts.map +1 -0
  30. package/dist/NadoTx-CWCklgY4.d.ts +50 -0
  31. package/dist/NadoTx-CWCklgY4.d.ts.map +1 -0
  32. package/dist/NadoTx-MYNIlXyq.d.cts +50 -0
  33. package/dist/NadoTx-MYNIlXyq.d.cts.map +1 -0
  34. package/dist/clientTypes-BpxOUu1q.d.ts +709 -0
  35. package/dist/clientTypes-BpxOUu1q.d.ts.map +1 -0
  36. package/dist/clientTypes-BsJ2yIC4.d.cts +709 -0
  37. package/dist/clientTypes-BsJ2yIC4.d.cts.map +1 -0
  38. package/dist/collateralEventType-CzH_2iTV.d.ts +5 -0
  39. package/dist/collateralEventType-CzH_2iTV.d.ts.map +1 -0
  40. package/dist/collateralEventType-DIm6Te7F.d.cts +5 -0
  41. package/dist/collateralEventType-DIm6Te7F.d.cts.map +1 -0
  42. package/dist/dataMappers.cjs +269 -346
  43. package/dist/dataMappers.cjs.map +1 -1
  44. package/dist/dataMappers.d.cts +7 -12
  45. package/dist/dataMappers.d.cts.map +1 -0
  46. package/dist/dataMappers.d.ts +7 -12
  47. package/dist/dataMappers.d.ts.map +1 -0
  48. package/dist/dataMappers.js +248 -314
  49. package/dist/dataMappers.js.map +1 -1
  50. package/dist/endpoints.cjs +8 -32
  51. package/dist/endpoints.cjs.map +1 -1
  52. package/dist/endpoints.d.cts +4 -2
  53. package/dist/endpoints.d.cts.map +1 -0
  54. package/dist/endpoints.d.ts +4 -2
  55. package/dist/endpoints.d.ts.map +1 -0
  56. package/dist/endpoints.js +8 -8
  57. package/dist/endpoints.js.map +1 -1
  58. package/dist/index-D6CnpA_r.d.cts +1 -0
  59. package/dist/index-DhI2LvVQ.d.ts +1 -0
  60. package/dist/index.cjs +15 -33
  61. package/dist/index.d.cts +14 -18
  62. package/dist/index.d.ts +14 -18
  63. package/dist/index.js +8 -7
  64. package/dist/indexerBalanceValue-4AuNuTAc.d.cts +32 -0
  65. package/dist/indexerBalanceValue-4AuNuTAc.d.cts.map +1 -0
  66. package/dist/indexerBalanceValue-B0OggI67.d.ts +32 -0
  67. package/dist/indexerBalanceValue-B0OggI67.d.ts.map +1 -0
  68. package/dist/paginatedEventsTypes-DtGDU-kI.d.cts +110 -0
  69. package/dist/paginatedEventsTypes-DtGDU-kI.d.cts.map +1 -0
  70. package/dist/paginatedEventsTypes-RwXoQrEa.d.ts +110 -0
  71. package/dist/paginatedEventsTypes-RwXoQrEa.d.ts.map +1 -0
  72. package/dist/serverModelTypes-CM2g040o.d.cts +262 -0
  73. package/dist/serverModelTypes-CM2g040o.d.cts.map +1 -0
  74. package/dist/serverModelTypes-DPHMUSZe.d.ts +262 -0
  75. package/dist/serverModelTypes-DPHMUSZe.d.ts.map +1 -0
  76. package/dist/serverTypes-BMSNh2GK.d.cts +452 -0
  77. package/dist/serverTypes-BMSNh2GK.d.cts.map +1 -0
  78. package/dist/serverTypes-c8IABU73.d.ts +452 -0
  79. package/dist/serverTypes-c8IABU73.d.ts.map +1 -0
  80. package/dist/types/CandlestickPeriod.cjs +16 -40
  81. package/dist/types/CandlestickPeriod.cjs.map +1 -1
  82. package/dist/types/CandlestickPeriod.d.cts +2 -13
  83. package/dist/types/CandlestickPeriod.d.ts +2 -13
  84. package/dist/types/CandlestickPeriod.js +16 -16
  85. package/dist/types/CandlestickPeriod.js.map +1 -1
  86. package/dist/types/IndexerEventType.cjs +0 -19
  87. package/dist/types/IndexerEventType.d.cts +2 -3
  88. package/dist/types/IndexerEventType.d.ts +2 -3
  89. package/dist/types/IndexerEventType.js +1 -1
  90. package/dist/types/IndexerLeaderboardType.cjs +0 -19
  91. package/dist/types/IndexerLeaderboardType.d.cts +2 -11
  92. package/dist/types/IndexerLeaderboardType.d.ts +2 -11
  93. package/dist/types/IndexerLeaderboardType.js +1 -1
  94. package/dist/types/NadoTx.cjs +0 -19
  95. package/dist/types/NadoTx.d.cts +2 -48
  96. package/dist/types/NadoTx.d.ts +2 -48
  97. package/dist/types/NadoTx.js +1 -1
  98. package/dist/types/clientTypes.cjs +0 -19
  99. package/dist/types/clientTypes.d.cts +2 -709
  100. package/dist/types/clientTypes.d.ts +2 -709
  101. package/dist/types/clientTypes.js +1 -1
  102. package/dist/types/collateralEventType.cjs +0 -19
  103. package/dist/types/collateralEventType.d.cts +2 -3
  104. package/dist/types/collateralEventType.d.ts +2 -3
  105. package/dist/types/collateralEventType.js +1 -1
  106. package/dist/types/index.cjs +3 -41
  107. package/dist/types/index.d.cts +10 -13
  108. package/dist/types/index.d.ts +10 -13
  109. package/dist/types/index.js +2 -11
  110. package/dist/types/paginatedEventsTypes.cjs +0 -19
  111. package/dist/types/paginatedEventsTypes.d.cts +2 -115
  112. package/dist/types/paginatedEventsTypes.d.ts +2 -115
  113. package/dist/types/paginatedEventsTypes.js +1 -1
  114. package/dist/types/serverModelTypes.cjs +0 -19
  115. package/dist/types/serverModelTypes.d.cts +2 -260
  116. package/dist/types/serverModelTypes.d.ts +2 -260
  117. package/dist/types/serverModelTypes.js +1 -1
  118. package/dist/types/serverTypes.cjs +0 -19
  119. package/dist/types/serverTypes.d.cts +2 -451
  120. package/dist/types/serverTypes.d.ts +2 -451
  121. package/dist/types/serverTypes.js +1 -1
  122. package/dist/utils/index.cjs +5 -25
  123. package/dist/utils/index.d.cts +2 -12
  124. package/dist/utils/index.d.ts +2 -12
  125. package/dist/utils/index.js +2 -3
  126. package/dist/utils/indexerBalanceValue.cjs +32 -36
  127. package/dist/utils/indexerBalanceValue.cjs.map +1 -1
  128. package/dist/utils/indexerBalanceValue.d.cts +2 -39
  129. package/dist/utils/indexerBalanceValue.d.ts +2 -39
  130. package/dist/utils/indexerBalanceValue.js +29 -9
  131. package/dist/utils/indexerBalanceValue.js.map +1 -1
  132. package/package.json +10 -10
  133. package/dist/IndexerBaseClient.cjs.map +0 -1
  134. package/dist/index.cjs.map +0 -1
  135. package/dist/index.js.map +0 -1
  136. package/dist/types/IndexerEventType.cjs.map +0 -1
  137. package/dist/types/IndexerEventType.js.map +0 -1
  138. package/dist/types/IndexerLeaderboardType.cjs.map +0 -1
  139. package/dist/types/IndexerLeaderboardType.js.map +0 -1
  140. package/dist/types/NadoTx.cjs.map +0 -1
  141. package/dist/types/NadoTx.js.map +0 -1
  142. package/dist/types/clientTypes.cjs.map +0 -1
  143. package/dist/types/clientTypes.js.map +0 -1
  144. package/dist/types/collateralEventType.cjs.map +0 -1
  145. package/dist/types/collateralEventType.js.map +0 -1
  146. package/dist/types/index.cjs.map +0 -1
  147. package/dist/types/index.js.map +0 -1
  148. package/dist/types/paginatedEventsTypes.cjs.map +0 -1
  149. package/dist/types/paginatedEventsTypes.js.map +0 -1
  150. package/dist/types/serverModelTypes.cjs.map +0 -1
  151. package/dist/types/serverModelTypes.js.map +0 -1
  152. package/dist/types/serverTypes.cjs.map +0 -1
  153. package/dist/types/serverTypes.js.map +0 -1
  154. package/dist/utils/index.cjs.map +0 -1
  155. package/dist/utils/index.js.map +0 -1
@@ -1,384 +1,278 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_IndexerBaseClient = require("./IndexerBaseClient-3KfzA2ph.cjs");
3
+ let _nadohq_shared = require("@nadohq/shared");
4
+ //#region src/IndexerClient.ts
5
+ /**
6
+ * Indexer client providing paginated queries for historical data from the Nado indexer service
7
+ */
8
+ var IndexerClient = class extends require_IndexerBaseClient.IndexerBaseClient {
9
+ async getPaginatedSubaccountMatchEvents(params) {
10
+ const { startCursor, maxTimestampInclusive, limit: requestedLimit, subaccountName, subaccountOwner, isolated, productIds } = params;
11
+ const limit = requestedLimit + 1;
12
+ const events = await this.getMatchEvents({
13
+ startCursor,
14
+ maxTimestampInclusive,
15
+ limit,
16
+ subaccounts: [{
17
+ subaccountName,
18
+ subaccountOwner
19
+ }],
20
+ productIds,
21
+ isolated
22
+ });
23
+ return this.getPaginationEventsResponse(events, requestedLimit);
24
+ }
25
+ async getPaginatedSubaccountNlpEvents(params) {
26
+ const { startCursor, maxTimestampInclusive, limit: requestedLimit, subaccountName, subaccountOwner } = params;
27
+ const limit = requestedLimit + 1;
28
+ const baseResponse = await this.getEvents({
29
+ startCursor,
30
+ maxTimestampInclusive,
31
+ eventTypes: ["mint_nlp", "burn_nlp"],
32
+ limit: {
33
+ type: "txs",
34
+ value: limit
35
+ },
36
+ subaccounts: [{
37
+ subaccountName,
38
+ subaccountOwner
39
+ }]
40
+ });
41
+ const eventsBySubmissionIdx = /* @__PURE__ */ new Map();
42
+ baseResponse.forEach((event) => {
43
+ const mappedEvent = (() => {
44
+ const existingEvent = eventsBySubmissionIdx.get(event.submissionIndex);
45
+ if (existingEvent) return existingEvent;
46
+ const newEvent = {
47
+ nlpDelta: (0, _nadohq_shared.toBigNumber)(0),
48
+ primaryQuoteDelta: (0, _nadohq_shared.toBigNumber)(0),
49
+ timestamp: event.timestamp,
50
+ submissionIndex: event.submissionIndex,
51
+ tx: event.tx,
52
+ ...(0, _nadohq_shared.subaccountFromHex)(event.subaccount)
53
+ };
54
+ eventsBySubmissionIdx.set(event.submissionIndex, newEvent);
55
+ return newEvent;
56
+ })();
57
+ const balanceDelta = event.state.postBalance.amount.minus(event.state.preBalance.amount);
58
+ const productId = event.state.market.productId;
59
+ if (productId === _nadohq_shared.QUOTE_PRODUCT_ID) mappedEvent.primaryQuoteDelta = balanceDelta;
60
+ else if (productId === _nadohq_shared.NLP_PRODUCT_ID) mappedEvent.nlpDelta = balanceDelta;
61
+ else throw Error(`Invalid product ID for NLP event ${productId}`);
62
+ });
63
+ const events = Array.from(eventsBySubmissionIdx.values());
64
+ return this.getPaginationEventsResponse(events, requestedLimit);
65
+ }
66
+ async getPaginatedSubaccountCollateralEvents(params) {
67
+ const { startCursor, maxTimestampInclusive, limit: requestedLimit, subaccountName, subaccountOwner, eventTypes, isolated } = params;
68
+ const limit = requestedLimit + 1;
69
+ const events = (await this.getEvents({
70
+ startCursor,
71
+ maxTimestampInclusive,
72
+ eventTypes: eventTypes ?? [
73
+ "deposit_collateral",
74
+ "withdraw_collateral",
75
+ "transfer_quote"
76
+ ],
77
+ limit: {
78
+ type: "txs",
79
+ value: limit
80
+ },
81
+ subaccounts: [{
82
+ subaccountName,
83
+ subaccountOwner
84
+ }],
85
+ isolated
86
+ })).map((event) => {
87
+ if (event.state.type !== _nadohq_shared.ProductEngineType.SPOT) throw Error("Incorrect event state for collateral event");
88
+ return {
89
+ timestamp: event.timestamp,
90
+ eventType: event.eventType,
91
+ submissionIndex: event.submissionIndex,
92
+ snapshot: event.state,
93
+ amount: event.state.postBalance.amount.minus(event.state.preBalance.amount),
94
+ newAmount: event.state.postBalance.amount,
95
+ tx: event.tx,
96
+ ...(0, _nadohq_shared.subaccountFromHex)(event.subaccount)
97
+ };
98
+ });
99
+ return this.getPaginationEventsResponse(events, requestedLimit);
100
+ }
101
+ async getPaginatedSubaccountOrders(params) {
102
+ const { startCursor, maxTimestampInclusive, limit: requestedLimit, subaccountName, subaccountOwner, productIds, triggerTypes, isolated } = params;
103
+ const limit = requestedLimit + 1;
104
+ const baseResponse = await this.getOrders({
105
+ startCursor,
106
+ maxTimestampInclusive,
107
+ subaccounts: [{
108
+ subaccountName,
109
+ subaccountOwner
110
+ }],
111
+ limit,
112
+ productIds,
113
+ triggerTypes,
114
+ isolated
115
+ });
116
+ const truncatedOrders = baseResponse.slice(0, requestedLimit);
117
+ return {
118
+ meta: {
119
+ hasMore: baseResponse.length > truncatedOrders.length,
120
+ nextCursor: baseResponse[truncatedOrders.length]?.submissionIndex
121
+ },
122
+ orders: truncatedOrders
123
+ };
124
+ }
125
+ async getPaginatedSubaccountSettlementEvents(params) {
126
+ const { startCursor, maxTimestampInclusive, limit: requestedLimit, subaccountName, subaccountOwner } = params;
127
+ const limit = requestedLimit + 1;
128
+ const events = (await this.getEvents({
129
+ startCursor,
130
+ maxTimestampInclusive,
131
+ eventTypes: ["settle_pnl"],
132
+ limit: {
133
+ type: "txs",
134
+ value: limit
135
+ },
136
+ subaccounts: [{
137
+ subaccountName,
138
+ subaccountOwner
139
+ }]
140
+ })).map((event) => {
141
+ if (event.state.market.productId === _nadohq_shared.QUOTE_PRODUCT_ID) return;
142
+ if (event.state.type !== _nadohq_shared.ProductEngineType.PERP) throw Error("Incorrect event state for settlement event");
143
+ return {
144
+ timestamp: event.timestamp,
145
+ submissionIndex: event.submissionIndex,
146
+ snapshot: event.state,
147
+ quoteDelta: event.state.preBalance.vQuoteBalance.minus(event.state.postBalance.vQuoteBalance),
148
+ isolated: event.isolated,
149
+ tx: event.tx,
150
+ ...(0, _nadohq_shared.subaccountFromHex)(event.subaccount)
151
+ };
152
+ }).filter((event) => !!event);
153
+ return this.getPaginationEventsResponse(events, requestedLimit);
154
+ }
155
+ async getPaginatedSubaccountLiquidationEvents(params) {
156
+ const { startCursor, maxTimestampInclusive, limit: requestedLimit, subaccountName, subaccountOwner, productIds } = params;
157
+ const limit = requestedLimit + 1;
158
+ const baseResponse = await this.getEvents({
159
+ startCursor,
160
+ maxTimestampInclusive,
161
+ eventTypes: ["liquidate_subaccount"],
162
+ limit: {
163
+ type: "txs",
164
+ value: limit
165
+ },
166
+ subaccounts: [{
167
+ subaccountName,
168
+ subaccountOwner
169
+ }],
170
+ productIds
171
+ });
172
+ const eventsBySubmissionIdx = /* @__PURE__ */ new Map();
173
+ const productIdsSet = productIds ? new Set(productIds) : void 0;
174
+ baseResponse.forEach((event) => {
175
+ if (productIdsSet && !productIdsSet.has(event.tx.liquidate_subaccount.product_id)) return;
176
+ const mappedEvent = (() => {
177
+ const existingEvent = eventsBySubmissionIdx.get(event.submissionIndex);
178
+ if (existingEvent) return existingEvent;
179
+ return {
180
+ perp: void 0,
181
+ spot: void 0,
182
+ quote: void 0,
183
+ timestamp: event.timestamp,
184
+ submissionIndex: event.submissionIndex
185
+ };
186
+ })();
187
+ const balanceDelta = event.state.postBalance.amount.minus(event.state.preBalance.amount);
188
+ if (balanceDelta.isZero() && event.state.market.productId !== _nadohq_shared.QUOTE_PRODUCT_ID) return;
189
+ if (event.state.type === _nadohq_shared.ProductEngineType.PERP) mappedEvent.perp = {
190
+ amountLiquidated: balanceDelta.negated(),
191
+ indexerEvent: event
192
+ };
193
+ else if (event.state.market.productId === _nadohq_shared.QUOTE_PRODUCT_ID) mappedEvent.quote = {
194
+ balanceDelta,
195
+ indexerEvent: event
196
+ };
197
+ else mappedEvent.spot = {
198
+ amountLiquidated: balanceDelta.negated(),
199
+ indexerEvent: event
200
+ };
201
+ eventsBySubmissionIdx.set(event.submissionIndex, mappedEvent);
202
+ });
203
+ const events = Array.from(eventsBySubmissionIdx.values());
204
+ return this.getPaginationEventsResponse(events, requestedLimit);
205
+ }
206
+ /**
207
+ * Get all interest funding payments for a given subaccount with the standard pagination response
208
+ * This is a simple wrapper over the underlying `getInterestFundingPayments` function. Very little
209
+ * additional processing is needed because the endpoint is well structured for pagination
210
+ *
211
+ * @param params
212
+ */
213
+ async getPaginatedSubaccountInterestFundingPayments(params) {
214
+ const { limit, productIds, startCursor, maxTimestampInclusive, subaccountName, subaccountOwner } = params;
215
+ const baseResponse = await this.getInterestFundingPayments({
216
+ limit,
217
+ productIds,
218
+ startCursor,
219
+ maxTimestampInclusive,
220
+ subaccount: {
221
+ subaccountName,
222
+ subaccountOwner
223
+ }
224
+ });
225
+ return {
226
+ ...baseResponse,
227
+ meta: {
228
+ hasMore: baseResponse.nextCursor != null,
229
+ nextCursor: baseResponse.nextCursor ?? void 0
230
+ }
231
+ };
232
+ }
233
+ /**
234
+ * Paginated leaderboard query that paginates on rank number.
235
+ *
236
+ * @param params
237
+ */
238
+ async getPaginatedLeaderboard(params) {
239
+ const requestedLimit = params.limit;
240
+ const baseResponse = await this.getLeaderboard({
241
+ contestId: params.contestId,
242
+ rankType: params.rankType,
243
+ limit: requestedLimit + 1,
244
+ startCursor: params.startCursor
245
+ });
246
+ const overflowParticipant = baseResponse.participants[requestedLimit];
247
+ let nextCursor;
248
+ if (overflowParticipant) nextCursor = (params.rankType ? overflowParticipant.tracks[params.rankType] : Object.values(overflowParticipant.tracks)[0]).rank;
249
+ return {
250
+ ...baseResponse,
251
+ participants: baseResponse.participants.slice(0, requestedLimit),
252
+ meta: {
253
+ hasMore: baseResponse.participants.length > requestedLimit,
254
+ nextCursor: nextCursor !== void 0 ? (0, _nadohq_shared.toIntegerString)(nextCursor) : void 0
255
+ }
256
+ };
257
+ }
258
+ /**
259
+ * A util function to generate the standard pagination response for events
260
+ * @param events
261
+ * @param requestedLimit given by consumers of the SDK
262
+ * @private
263
+ */
264
+ getPaginationEventsResponse(events, requestedLimit) {
265
+ const truncatedEvents = events.slice(0, requestedLimit);
266
+ return {
267
+ events: truncatedEvents,
268
+ meta: {
269
+ hasMore: events.length > truncatedEvents.length,
270
+ nextCursor: events[truncatedEvents.length]?.submissionIndex
271
+ }
272
+ };
273
+ }
9
274
  };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
275
+ //#endregion
276
+ exports.IndexerClient = IndexerClient;
19
277
 
20
- // src/IndexerClient.ts
21
- var IndexerClient_exports = {};
22
- __export(IndexerClient_exports, {
23
- IndexerClient: () => IndexerClient
24
- });
25
- module.exports = __toCommonJS(IndexerClient_exports);
26
- var import_shared = require("@nadohq/shared");
27
- var import_IndexerBaseClient = require("./IndexerBaseClient.cjs");
28
- var IndexerClient = class extends import_IndexerBaseClient.IndexerBaseClient {
29
- async getPaginatedSubaccountMatchEvents(params) {
30
- const {
31
- startCursor,
32
- maxTimestampInclusive,
33
- limit: requestedLimit,
34
- subaccountName,
35
- subaccountOwner,
36
- isolated,
37
- productIds
38
- } = params;
39
- const limit = requestedLimit + 1;
40
- const events = await this.getMatchEvents({
41
- startCursor,
42
- maxTimestampInclusive,
43
- limit,
44
- subaccounts: [{ subaccountName, subaccountOwner }],
45
- productIds,
46
- isolated
47
- });
48
- return this.getPaginationEventsResponse(events, requestedLimit);
49
- }
50
- async getPaginatedSubaccountNlpEvents(params) {
51
- const {
52
- startCursor,
53
- maxTimestampInclusive,
54
- limit: requestedLimit,
55
- subaccountName,
56
- subaccountOwner
57
- } = params;
58
- const limit = requestedLimit + 1;
59
- const baseResponse = await this.getEvents({
60
- startCursor,
61
- maxTimestampInclusive,
62
- eventTypes: ["mint_nlp", "burn_nlp"],
63
- limit: {
64
- type: "txs",
65
- value: limit
66
- },
67
- subaccounts: [{ subaccountName, subaccountOwner }]
68
- });
69
- const eventsBySubmissionIdx = /* @__PURE__ */ new Map();
70
- baseResponse.forEach((event) => {
71
- const mappedEvent = (() => {
72
- const existingEvent = eventsBySubmissionIdx.get(event.submissionIndex);
73
- if (existingEvent) {
74
- return existingEvent;
75
- }
76
- const newEvent = {
77
- nlpDelta: (0, import_shared.toBigNumber)(0),
78
- primaryQuoteDelta: (0, import_shared.toBigNumber)(0),
79
- timestamp: event.timestamp,
80
- submissionIndex: event.submissionIndex,
81
- tx: event.tx,
82
- ...(0, import_shared.subaccountFromHex)(event.subaccount)
83
- };
84
- eventsBySubmissionIdx.set(event.submissionIndex, newEvent);
85
- return newEvent;
86
- })();
87
- const balanceDelta = event.state.postBalance.amount.minus(
88
- event.state.preBalance.amount
89
- );
90
- const productId = event.state.market.productId;
91
- if (productId === import_shared.QUOTE_PRODUCT_ID) {
92
- mappedEvent.primaryQuoteDelta = balanceDelta;
93
- } else if (productId === import_shared.NLP_PRODUCT_ID) {
94
- mappedEvent.nlpDelta = balanceDelta;
95
- } else {
96
- throw Error(`Invalid product ID for NLP event ${productId}`);
97
- }
98
- });
99
- const events = Array.from(eventsBySubmissionIdx.values());
100
- return this.getPaginationEventsResponse(events, requestedLimit);
101
- }
102
- async getPaginatedSubaccountCollateralEvents(params) {
103
- const {
104
- startCursor,
105
- maxTimestampInclusive,
106
- limit: requestedLimit,
107
- subaccountName,
108
- subaccountOwner,
109
- eventTypes,
110
- isolated
111
- } = params;
112
- const limit = requestedLimit + 1;
113
- const baseResponse = await this.getEvents({
114
- startCursor,
115
- maxTimestampInclusive,
116
- eventTypes: eventTypes ?? [
117
- "deposit_collateral",
118
- "withdraw_collateral",
119
- "transfer_quote"
120
- ],
121
- limit: {
122
- type: "txs",
123
- value: limit
124
- },
125
- subaccounts: [{ subaccountName, subaccountOwner }],
126
- isolated
127
- });
128
- const events = baseResponse.map((event) => {
129
- if (event.state.type !== import_shared.ProductEngineType.SPOT) {
130
- throw Error("Incorrect event state for collateral event");
131
- }
132
- return {
133
- timestamp: event.timestamp,
134
- // This cast is safe as the query param restricts to collateral events
135
- eventType: event.eventType,
136
- submissionIndex: event.submissionIndex,
137
- snapshot: event.state,
138
- amount: event.state.postBalance.amount.minus(
139
- event.state.preBalance.amount
140
- ),
141
- newAmount: event.state.postBalance.amount,
142
- tx: event.tx,
143
- ...(0, import_shared.subaccountFromHex)(event.subaccount)
144
- };
145
- });
146
- return this.getPaginationEventsResponse(events, requestedLimit);
147
- }
148
- async getPaginatedSubaccountOrders(params) {
149
- const {
150
- startCursor,
151
- maxTimestampInclusive,
152
- limit: requestedLimit,
153
- subaccountName,
154
- subaccountOwner,
155
- productIds,
156
- triggerTypes,
157
- isolated
158
- } = params;
159
- const limit = requestedLimit + 1;
160
- const baseResponse = await this.getOrders({
161
- startCursor,
162
- maxTimestampInclusive,
163
- subaccounts: [{ subaccountName, subaccountOwner }],
164
- limit,
165
- productIds,
166
- triggerTypes,
167
- isolated
168
- });
169
- const truncatedOrders = baseResponse.slice(0, requestedLimit);
170
- const hasMore = baseResponse.length > truncatedOrders.length;
171
- return {
172
- meta: {
173
- hasMore,
174
- nextCursor: baseResponse[truncatedOrders.length]?.submissionIndex
175
- },
176
- orders: truncatedOrders
177
- };
178
- }
179
- async getPaginatedSubaccountSettlementEvents(params) {
180
- const {
181
- startCursor,
182
- maxTimestampInclusive,
183
- limit: requestedLimit,
184
- subaccountName,
185
- subaccountOwner
186
- } = params;
187
- const limit = requestedLimit + 1;
188
- const baseResponse = await this.getEvents({
189
- startCursor,
190
- maxTimestampInclusive,
191
- eventTypes: ["settle_pnl"],
192
- limit: {
193
- type: "txs",
194
- value: limit
195
- },
196
- subaccounts: [{ subaccountName, subaccountOwner }]
197
- });
198
- const events = baseResponse.map((event) => {
199
- if (event.state.market.productId === import_shared.QUOTE_PRODUCT_ID) {
200
- return;
201
- }
202
- if (event.state.type !== import_shared.ProductEngineType.PERP) {
203
- throw Error("Incorrect event state for settlement event");
204
- }
205
- return {
206
- timestamp: event.timestamp,
207
- submissionIndex: event.submissionIndex,
208
- snapshot: event.state,
209
- // Spot quote delta = -vQuote delta
210
- quoteDelta: event.state.preBalance.vQuoteBalance.minus(
211
- event.state.postBalance.vQuoteBalance
212
- ),
213
- isolated: event.isolated,
214
- tx: event.tx,
215
- ...(0, import_shared.subaccountFromHex)(event.subaccount)
216
- };
217
- }).filter((event) => !!event);
218
- return this.getPaginationEventsResponse(events, requestedLimit);
219
- }
220
- async getPaginatedSubaccountLiquidationEvents(params) {
221
- const {
222
- startCursor,
223
- maxTimestampInclusive,
224
- limit: requestedLimit,
225
- subaccountName,
226
- subaccountOwner,
227
- productIds
228
- } = params;
229
- const limit = requestedLimit + 1;
230
- const baseResponse = await this.getEvents({
231
- startCursor,
232
- maxTimestampInclusive,
233
- eventTypes: ["liquidate_subaccount"],
234
- limit: {
235
- type: "txs",
236
- value: limit
237
- },
238
- subaccounts: [{ subaccountName, subaccountOwner }],
239
- productIds
240
- });
241
- const eventsBySubmissionIdx = /* @__PURE__ */ new Map();
242
- const productIdsSet = productIds ? new Set(productIds) : void 0;
243
- baseResponse.forEach((event) => {
244
- if (productIdsSet && !productIdsSet.has(
245
- // product_id can also encode a health group for spread liquidation, but we ignore
246
- // this case for now
247
- event.tx.liquidate_subaccount.product_id
248
- )) {
249
- return;
250
- }
251
- const mappedEvent = (() => {
252
- const existingEvent = eventsBySubmissionIdx.get(event.submissionIndex);
253
- if (existingEvent) {
254
- return existingEvent;
255
- }
256
- const newEvent = {
257
- perp: void 0,
258
- spot: void 0,
259
- quote: void 0,
260
- timestamp: event.timestamp,
261
- submissionIndex: event.submissionIndex
262
- };
263
- return newEvent;
264
- })();
265
- const balanceDelta = event.state.postBalance.amount.minus(
266
- event.state.preBalance.amount
267
- );
268
- if (balanceDelta.isZero() && event.state.market.productId !== import_shared.QUOTE_PRODUCT_ID) {
269
- return;
270
- }
271
- if (event.state.type === import_shared.ProductEngineType.PERP) {
272
- mappedEvent.perp = {
273
- amountLiquidated: balanceDelta.negated(),
274
- // This cast is safe because we're checking for event.state.type
275
- indexerEvent: event
276
- };
277
- } else if (event.state.market.productId === import_shared.QUOTE_PRODUCT_ID) {
278
- mappedEvent.quote = {
279
- balanceDelta,
280
- indexerEvent: event
281
- };
282
- } else {
283
- mappedEvent.spot = {
284
- amountLiquidated: balanceDelta.negated(),
285
- indexerEvent: event
286
- };
287
- }
288
- eventsBySubmissionIdx.set(event.submissionIndex, mappedEvent);
289
- });
290
- const events = Array.from(
291
- eventsBySubmissionIdx.values()
292
- );
293
- return this.getPaginationEventsResponse(events, requestedLimit);
294
- }
295
- /**
296
- * Get all interest funding payments for a given subaccount with the standard pagination response
297
- * This is a simple wrapper over the underlying `getInterestFundingPayments` function. Very little
298
- * additional processing is needed because the endpoint is well structured for pagination
299
- *
300
- * @param params
301
- */
302
- async getPaginatedSubaccountInterestFundingPayments(params) {
303
- const {
304
- limit,
305
- productIds,
306
- startCursor,
307
- maxTimestampInclusive,
308
- subaccountName,
309
- subaccountOwner
310
- } = params;
311
- const baseResponse = await this.getInterestFundingPayments({
312
- limit,
313
- productIds,
314
- startCursor,
315
- maxTimestampInclusive,
316
- subaccount: {
317
- subaccountName,
318
- subaccountOwner
319
- }
320
- });
321
- return {
322
- ...baseResponse,
323
- meta: {
324
- hasMore: baseResponse.nextCursor != null,
325
- nextCursor: baseResponse.nextCursor ?? void 0
326
- }
327
- };
328
- }
329
- /**
330
- * Paginated leaderboard query that paginates on rank number.
331
- *
332
- * @param params
333
- */
334
- async getPaginatedLeaderboard(params) {
335
- const requestedLimit = params.limit;
336
- const baseResponse = await this.getLeaderboard({
337
- contestId: params.contestId,
338
- rankType: params.rankType,
339
- // Query for 1 more result for proper pagination
340
- limit: requestedLimit + 1,
341
- // Start cursor is the next rank number
342
- startCursor: params.startCursor
343
- });
344
- const overflowParticipant = baseResponse.participants[requestedLimit];
345
- let nextCursor;
346
- if (overflowParticipant) {
347
- const trackData = params.rankType ? overflowParticipant.tracks[params.rankType] : Object.values(overflowParticipant.tracks)[0];
348
- nextCursor = trackData.rank;
349
- }
350
- return {
351
- ...baseResponse,
352
- // Truncate the response to the requested limit
353
- participants: baseResponse.participants.slice(0, requestedLimit),
354
- meta: {
355
- hasMore: baseResponse.participants.length > requestedLimit,
356
- nextCursor: nextCursor !== void 0 ? (0, import_shared.toIntegerString)(nextCursor) : void 0
357
- }
358
- };
359
- }
360
- /**
361
- * A util function to generate the standard pagination response for events
362
- * @param events
363
- * @param requestedLimit given by consumers of the SDK
364
- * @private
365
- */
366
- getPaginationEventsResponse(events, requestedLimit) {
367
- const truncatedEvents = events.slice(0, requestedLimit);
368
- const hasMore = events.length > truncatedEvents.length;
369
- return {
370
- events: truncatedEvents,
371
- meta: {
372
- hasMore,
373
- // We want the NEXT available cursor, so we use the first event after the truncation cutoff
374
- // If len(events) === len(truncatedEvents), there are no more entries and this is undefined
375
- nextCursor: events[truncatedEvents.length]?.submissionIndex
376
- }
377
- };
378
- }
379
- };
380
- // Annotate the CommonJS export names for ESM import in node:
381
- 0 && (module.exports = {
382
- IndexerClient
383
- });
384
278
  //# sourceMappingURL=IndexerClient.cjs.map