@nadohq/indexer-client 0.14.0 → 0.17.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.
- package/dist/CandlestickPeriod-1DtcEiOb.d.ts +15 -0
- package/dist/CandlestickPeriod-1DtcEiOb.d.ts.map +1 -0
- package/dist/CandlestickPeriod-D3_IoSev.d.cts +15 -0
- package/dist/CandlestickPeriod-D3_IoSev.d.cts.map +1 -0
- package/dist/IndexerBaseClient-3KfzA2ph.cjs +639 -0
- package/dist/IndexerBaseClient-3KfzA2ph.cjs.map +1 -0
- package/dist/IndexerBaseClient.cjs +3 -788
- package/dist/IndexerBaseClient.d.cts +223 -229
- package/dist/IndexerBaseClient.d.cts.map +1 -0
- package/dist/IndexerBaseClient.d.ts +223 -229
- package/dist/IndexerBaseClient.d.ts.map +1 -0
- package/dist/IndexerBaseClient.js +601 -783
- package/dist/IndexerBaseClient.js.map +1 -1
- package/dist/IndexerClient.cjs +275 -381
- package/dist/IndexerClient.cjs.map +1 -1
- package/dist/IndexerClient.d.cts +32 -43
- package/dist/IndexerClient.d.cts.map +1 -0
- package/dist/IndexerClient.d.ts +32 -43
- package/dist/IndexerClient.d.ts.map +1 -0
- package/dist/IndexerClient.js +273 -362
- package/dist/IndexerClient.js.map +1 -1
- package/dist/IndexerEventType-B-uXsf-a.d.cts +5 -0
- package/dist/IndexerEventType-B-uXsf-a.d.cts.map +1 -0
- package/dist/IndexerEventType-DCLkSlgR.d.ts +5 -0
- package/dist/IndexerEventType-DCLkSlgR.d.ts.map +1 -0
- package/dist/IndexerLeaderboardType-Ck12QVWR.d.cts +13 -0
- package/dist/IndexerLeaderboardType-Ck12QVWR.d.cts.map +1 -0
- package/dist/IndexerLeaderboardType-DAKw2tfI.d.ts +13 -0
- package/dist/IndexerLeaderboardType-DAKw2tfI.d.ts.map +1 -0
- package/dist/NadoTx-CWCklgY4.d.ts +50 -0
- package/dist/NadoTx-CWCklgY4.d.ts.map +1 -0
- package/dist/NadoTx-MYNIlXyq.d.cts +50 -0
- package/dist/NadoTx-MYNIlXyq.d.cts.map +1 -0
- package/dist/clientTypes-BpxOUu1q.d.ts +709 -0
- package/dist/clientTypes-BpxOUu1q.d.ts.map +1 -0
- package/dist/clientTypes-BsJ2yIC4.d.cts +709 -0
- package/dist/clientTypes-BsJ2yIC4.d.cts.map +1 -0
- package/dist/collateralEventType-CzH_2iTV.d.ts +5 -0
- package/dist/collateralEventType-CzH_2iTV.d.ts.map +1 -0
- package/dist/collateralEventType-DIm6Te7F.d.cts +5 -0
- package/dist/collateralEventType-DIm6Te7F.d.cts.map +1 -0
- package/dist/dataMappers.cjs +269 -346
- package/dist/dataMappers.cjs.map +1 -1
- package/dist/dataMappers.d.cts +7 -12
- package/dist/dataMappers.d.cts.map +1 -0
- package/dist/dataMappers.d.ts +7 -12
- package/dist/dataMappers.d.ts.map +1 -0
- package/dist/dataMappers.js +248 -314
- package/dist/dataMappers.js.map +1 -1
- package/dist/endpoints.cjs +8 -32
- package/dist/endpoints.cjs.map +1 -1
- package/dist/endpoints.d.cts +4 -2
- package/dist/endpoints.d.cts.map +1 -0
- package/dist/endpoints.d.ts +4 -2
- package/dist/endpoints.d.ts.map +1 -0
- package/dist/endpoints.js +8 -8
- package/dist/endpoints.js.map +1 -1
- package/dist/index-D6CnpA_r.d.cts +1 -0
- package/dist/index-DhI2LvVQ.d.ts +1 -0
- package/dist/index.cjs +15 -33
- package/dist/index.d.cts +14 -18
- package/dist/index.d.ts +14 -18
- package/dist/index.js +8 -7
- package/dist/indexerBalanceValue-4AuNuTAc.d.cts +32 -0
- package/dist/indexerBalanceValue-4AuNuTAc.d.cts.map +1 -0
- package/dist/indexerBalanceValue-B0OggI67.d.ts +32 -0
- package/dist/indexerBalanceValue-B0OggI67.d.ts.map +1 -0
- package/dist/paginatedEventsTypes-DtGDU-kI.d.cts +110 -0
- package/dist/paginatedEventsTypes-DtGDU-kI.d.cts.map +1 -0
- package/dist/paginatedEventsTypes-RwXoQrEa.d.ts +110 -0
- package/dist/paginatedEventsTypes-RwXoQrEa.d.ts.map +1 -0
- package/dist/serverModelTypes-CM2g040o.d.cts +262 -0
- package/dist/serverModelTypes-CM2g040o.d.cts.map +1 -0
- package/dist/serverModelTypes-DPHMUSZe.d.ts +262 -0
- package/dist/serverModelTypes-DPHMUSZe.d.ts.map +1 -0
- package/dist/serverTypes-BMSNh2GK.d.cts +452 -0
- package/dist/serverTypes-BMSNh2GK.d.cts.map +1 -0
- package/dist/serverTypes-c8IABU73.d.ts +452 -0
- package/dist/serverTypes-c8IABU73.d.ts.map +1 -0
- package/dist/types/CandlestickPeriod.cjs +16 -40
- package/dist/types/CandlestickPeriod.cjs.map +1 -1
- package/dist/types/CandlestickPeriod.d.cts +2 -13
- package/dist/types/CandlestickPeriod.d.ts +2 -13
- package/dist/types/CandlestickPeriod.js +16 -16
- package/dist/types/CandlestickPeriod.js.map +1 -1
- package/dist/types/IndexerEventType.cjs +0 -19
- package/dist/types/IndexerEventType.d.cts +2 -3
- package/dist/types/IndexerEventType.d.ts +2 -3
- package/dist/types/IndexerEventType.js +1 -1
- package/dist/types/IndexerLeaderboardType.cjs +0 -19
- package/dist/types/IndexerLeaderboardType.d.cts +2 -11
- package/dist/types/IndexerLeaderboardType.d.ts +2 -11
- package/dist/types/IndexerLeaderboardType.js +1 -1
- package/dist/types/NadoTx.cjs +0 -19
- package/dist/types/NadoTx.d.cts +2 -48
- package/dist/types/NadoTx.d.ts +2 -48
- package/dist/types/NadoTx.js +1 -1
- package/dist/types/clientTypes.cjs +0 -19
- package/dist/types/clientTypes.d.cts +2 -709
- package/dist/types/clientTypes.d.ts +2 -709
- package/dist/types/clientTypes.js +1 -1
- package/dist/types/collateralEventType.cjs +0 -19
- package/dist/types/collateralEventType.d.cts +2 -3
- package/dist/types/collateralEventType.d.ts +2 -3
- package/dist/types/collateralEventType.js +1 -1
- package/dist/types/index.cjs +3 -41
- package/dist/types/index.d.cts +10 -13
- package/dist/types/index.d.ts +10 -13
- package/dist/types/index.js +2 -11
- package/dist/types/paginatedEventsTypes.cjs +0 -19
- package/dist/types/paginatedEventsTypes.d.cts +2 -115
- package/dist/types/paginatedEventsTypes.d.ts +2 -115
- package/dist/types/paginatedEventsTypes.js +1 -1
- package/dist/types/serverModelTypes.cjs +0 -19
- package/dist/types/serverModelTypes.d.cts +2 -260
- package/dist/types/serverModelTypes.d.ts +2 -260
- package/dist/types/serverModelTypes.js +1 -1
- package/dist/types/serverTypes.cjs +0 -19
- package/dist/types/serverTypes.d.cts +2 -451
- package/dist/types/serverTypes.d.ts +2 -451
- package/dist/types/serverTypes.js +1 -1
- package/dist/utils/index.cjs +5 -25
- package/dist/utils/index.d.cts +2 -12
- package/dist/utils/index.d.ts +2 -12
- package/dist/utils/index.js +2 -3
- package/dist/utils/indexerBalanceValue.cjs +32 -36
- package/dist/utils/indexerBalanceValue.cjs.map +1 -1
- package/dist/utils/indexerBalanceValue.d.cts +2 -39
- package/dist/utils/indexerBalanceValue.d.ts +2 -39
- package/dist/utils/indexerBalanceValue.js +29 -9
- package/dist/utils/indexerBalanceValue.js.map +1 -1
- package/package.json +10 -10
- package/dist/IndexerBaseClient.cjs.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/types/IndexerEventType.cjs.map +0 -1
- package/dist/types/IndexerEventType.js.map +0 -1
- package/dist/types/IndexerLeaderboardType.cjs.map +0 -1
- package/dist/types/IndexerLeaderboardType.js.map +0 -1
- package/dist/types/NadoTx.cjs.map +0 -1
- package/dist/types/NadoTx.js.map +0 -1
- package/dist/types/clientTypes.cjs.map +0 -1
- package/dist/types/clientTypes.js.map +0 -1
- package/dist/types/collateralEventType.cjs.map +0 -1
- package/dist/types/collateralEventType.js.map +0 -1
- package/dist/types/index.cjs.map +0 -1
- package/dist/types/index.js.map +0 -1
- package/dist/types/paginatedEventsTypes.cjs.map +0 -1
- package/dist/types/paginatedEventsTypes.js.map +0 -1
- package/dist/types/serverModelTypes.cjs.map +0 -1
- package/dist/types/serverModelTypes.js.map +0 -1
- package/dist/types/serverTypes.cjs.map +0 -1
- package/dist/types/serverTypes.js.map +0 -1
- package/dist/utils/index.cjs.map +0 -1
- package/dist/utils/index.js.map +0 -1
package/dist/IndexerClient.cjs
CHANGED
|
@@ -1,384 +1,278 @@
|
|
|
1
|
-
"
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
11
|
-
|
|
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
|