@nadohq/indexer-client 0.6.0 → 0.7.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/IndexerBaseClient.cjs +28 -27
- package/dist/IndexerBaseClient.cjs.map +1 -1
- package/dist/IndexerBaseClient.d.cts +10 -7
- package/dist/IndexerBaseClient.d.ts +10 -7
- package/dist/IndexerBaseClient.js +28 -27
- package/dist/IndexerBaseClient.js.map +1 -1
- package/dist/IndexerClient.cjs +6 -1
- package/dist/IndexerClient.cjs.map +1 -1
- package/dist/IndexerClient.js +6 -1
- package/dist/IndexerClient.js.map +1 -1
- package/dist/dataMappers.cjs +26 -12
- package/dist/dataMappers.cjs.map +1 -1
- package/dist/dataMappers.js +26 -12
- package/dist/dataMappers.js.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/types/IndexerLeaderboardType.cjs.map +1 -1
- package/dist/types/IndexerLeaderboardType.d.cts +9 -1
- package/dist/types/IndexerLeaderboardType.d.ts +9 -1
- package/dist/types/clientTypes.cjs.map +1 -1
- package/dist/types/clientTypes.d.cts +45 -17
- package/dist/types/clientTypes.d.ts +45 -17
- package/dist/types/index.d.cts +3 -3
- package/dist/types/index.d.ts +3 -3
- package/dist/types/serverModelTypes.cjs.map +1 -1
- package/dist/types/serverModelTypes.d.cts +25 -10
- package/dist/types/serverModelTypes.d.ts +25 -10
- package/dist/types/serverTypes.cjs.map +1 -1
- package/dist/types/serverTypes.d.cts +17 -9
- package/dist/types/serverTypes.d.ts +17 -9
- package/package.json +4 -4
- package/src/IndexerBaseClient.ts +35 -36
- package/src/IndexerClient.ts +13 -5
- package/src/dataMappers.ts +26 -10
- package/src/types/IndexerLeaderboardType.ts +14 -2
- package/src/types/clientTypes.ts +52 -28
- package/src/types/serverModelTypes.ts +29 -9
- package/src/types/serverTypes.ts +19 -10
|
@@ -110,9 +110,10 @@ interface IndexerServerMakerStatisticsParams {
|
|
|
110
110
|
}
|
|
111
111
|
interface IndexerServerLeaderboardParams {
|
|
112
112
|
contest_id: number;
|
|
113
|
-
rank_type
|
|
113
|
+
rank_type?: IndexerLeaderboardRankType;
|
|
114
114
|
start?: number | string;
|
|
115
115
|
limit?: number | string;
|
|
116
|
+
order?: 'ASC' | 'DESC';
|
|
116
117
|
}
|
|
117
118
|
interface IndexerServerLeaderboardRankParams {
|
|
118
119
|
subaccount: string;
|
|
@@ -120,11 +121,15 @@ interface IndexerServerLeaderboardRankParams {
|
|
|
120
121
|
}
|
|
121
122
|
interface IndexerServerLeaderboardContestsParams {
|
|
122
123
|
contest_ids: number[];
|
|
124
|
+
active?: boolean;
|
|
123
125
|
}
|
|
124
|
-
interface
|
|
126
|
+
interface IndexerServerLeaderboardRegistrationsParams {
|
|
125
127
|
subaccount: string;
|
|
126
|
-
|
|
127
|
-
|
|
128
|
+
contest_ids: number[];
|
|
129
|
+
active?: boolean;
|
|
130
|
+
}
|
|
131
|
+
interface IndexerServerLeaderboardRegisterParams {
|
|
132
|
+
update_registration: SignedTx<EIP712LeaderboardAuthenticationValues>;
|
|
128
133
|
}
|
|
129
134
|
interface IndexerServerFastWithdrawalSignatureParams {
|
|
130
135
|
/**
|
|
@@ -159,7 +164,8 @@ interface IndexerServerQueryRequestByType {
|
|
|
159
164
|
leaderboard: IndexerServerLeaderboardParams;
|
|
160
165
|
leaderboard_contests: IndexerServerLeaderboardContestsParams;
|
|
161
166
|
leaderboard_rank: IndexerServerLeaderboardRankParams;
|
|
162
|
-
|
|
167
|
+
leaderboard_register: IndexerServerLeaderboardRegisterParams;
|
|
168
|
+
leaderboard_registrations: IndexerServerLeaderboardRegistrationsParams;
|
|
163
169
|
linked_signer_rate_limit: IndexerServerLinkedSignerParams;
|
|
164
170
|
maker_statistics: IndexerServerMakerStatisticsParams;
|
|
165
171
|
market_snapshots: IndexerServerMarketSnapshotsParams;
|
|
@@ -260,9 +266,10 @@ interface IndexerServerMakerStatisticsResponse {
|
|
|
260
266
|
interface IndexerServerLeaderboardResponse {
|
|
261
267
|
positions: IndexerServerLeaderboardPosition[];
|
|
262
268
|
}
|
|
263
|
-
interface
|
|
264
|
-
|
|
269
|
+
interface IndexerServerLeaderboardRegistrationsResponse {
|
|
270
|
+
registrations: IndexerServerLeaderboardRegistration[];
|
|
265
271
|
}
|
|
272
|
+
type IndexerServerLeaderboardRegisterResponse = IndexerServerLeaderboardRegistrationsResponse;
|
|
266
273
|
interface IndexerServerLeaderboardRankResponse {
|
|
267
274
|
positions: Record<string, IndexerServerLeaderboardPosition>;
|
|
268
275
|
}
|
|
@@ -328,7 +335,8 @@ interface IndexerServerQueryResponseByType {
|
|
|
328
335
|
leaderboard: IndexerServerLeaderboardResponse;
|
|
329
336
|
leaderboard_contests: IndexerServerLeaderboardContestsResponse;
|
|
330
337
|
leaderboard_rank: IndexerServerLeaderboardRankResponse;
|
|
331
|
-
|
|
338
|
+
leaderboard_register: IndexerServerLeaderboardRegisterResponse;
|
|
339
|
+
leaderboard_registrations: IndexerServerLeaderboardRegistrationsResponse;
|
|
332
340
|
linked_signer_rate_limit: IndexerServerLinkedSignerResponse;
|
|
333
341
|
maker_statistics: IndexerServerMakerStatisticsResponse;
|
|
334
342
|
market_snapshots: IndexerServerMarketSnapshotsResponse;
|
|
@@ -401,4 +409,4 @@ interface IndexerServerV2Symbol {
|
|
|
401
409
|
*/
|
|
402
410
|
type IndexerServerV2SymbolsResponse = Record<string, IndexerServerV2Symbol>;
|
|
403
411
|
|
|
404
|
-
export type { IndexerEdgeServerCandlesticksParams, IndexerEdgeServerCandlesticksResponse, IndexerEdgeServerMarketSnapshotsParams, IndexerEdgeServerMarketSnapshotsResponse, IndexerServerAllTimePoints, IndexerServerBacklogResponse, IndexerServerCandlesticksParams, IndexerServerCandlesticksResponse, IndexerServerDDAQueryParams, IndexerServerDDAResponse, IndexerServerEventsParams, IndexerServerEventsResponse, IndexerServerFastWithdrawalSignatureParams, IndexerServerFastWithdrawalSignatureResponse, IndexerServerFundingRate, IndexerServerFundingRateParams, IndexerServerFundingRateResponse, IndexerServerFundingRatesParams, IndexerServerFundingRatesResponse, IndexerServerInterestFundingParams, IndexerServerInterestFundingResponse, IndexerServerLeaderboardContestsParams, IndexerServerLeaderboardContestsResponse, IndexerServerLeaderboardParams, IndexerServerLeaderboardRankParams, IndexerServerLeaderboardRankResponse,
|
|
412
|
+
export type { IndexerEdgeServerCandlesticksParams, IndexerEdgeServerCandlesticksResponse, IndexerEdgeServerMarketSnapshotsParams, IndexerEdgeServerMarketSnapshotsResponse, IndexerServerAllTimePoints, IndexerServerBacklogResponse, IndexerServerCandlesticksParams, IndexerServerCandlesticksResponse, IndexerServerDDAQueryParams, IndexerServerDDAResponse, IndexerServerEventsParams, IndexerServerEventsResponse, IndexerServerFastWithdrawalSignatureParams, IndexerServerFastWithdrawalSignatureResponse, IndexerServerFundingRate, IndexerServerFundingRateParams, IndexerServerFundingRateResponse, IndexerServerFundingRatesParams, IndexerServerFundingRatesResponse, IndexerServerInterestFundingParams, IndexerServerInterestFundingResponse, IndexerServerLeaderboardContestsParams, IndexerServerLeaderboardContestsResponse, IndexerServerLeaderboardParams, IndexerServerLeaderboardRankParams, IndexerServerLeaderboardRankResponse, IndexerServerLeaderboardRegisterParams, IndexerServerLeaderboardRegisterResponse, IndexerServerLeaderboardRegistrationsParams, IndexerServerLeaderboardRegistrationsResponse, IndexerServerLeaderboardResponse, IndexerServerLinkedSignerParams, IndexerServerLinkedSignerResponse, IndexerServerListSubaccountsParams, IndexerServerListSubaccountsResponse, IndexerServerMakerStatisticsParams, IndexerServerMakerStatisticsResponse, IndexerServerMarketSnapshotsParams, IndexerServerMarketSnapshotsResponse, IndexerServerMatchEventsParams, IndexerServerMatchEventsResponse, IndexerServerMultiProductsParams, IndexerServerMultiProductsResponse, IndexerServerMultiSubaccountSnapshotsParams, IndexerServerMultiSubaccountSnapshotsResponse, IndexerServerNlpSnapshotsParams, IndexerServerNlpSnapshotsResponse, IndexerServerOraclePricesParams, IndexerServerOraclePricesResponse, IndexerServerOrdersParams, IndexerServerOrdersResponse, IndexerServerPerpPrices, IndexerServerPerpPricesParams, IndexerServerPerpPricesResponse, IndexerServerPointsEpoch, IndexerServerPointsParams, IndexerServerPointsResponse, IndexerServerPriceParams, IndexerServerPriceResponse, IndexerServerPrivateAlphaChoiceParams, IndexerServerPrivateAlphaChoiceResponse, IndexerServerProductsParams, IndexerServerProductsResponse, IndexerServerQueryRequestByType, IndexerServerQueryRequestType, IndexerServerQueryResponseByType, IndexerServerQuotePriceResponse, IndexerServerReferralCodeParams, IndexerServerReferralCodeResponse, IndexerServerTriggerTypeFilter, IndexerServerV2MarketHours, IndexerServerV2Symbol, IndexerServerV2SymbolsResponse, IndexerServerV2TickerResponse, IndexerServerV2TickersResponse };
|
|
@@ -110,9 +110,10 @@ interface IndexerServerMakerStatisticsParams {
|
|
|
110
110
|
}
|
|
111
111
|
interface IndexerServerLeaderboardParams {
|
|
112
112
|
contest_id: number;
|
|
113
|
-
rank_type
|
|
113
|
+
rank_type?: IndexerLeaderboardRankType;
|
|
114
114
|
start?: number | string;
|
|
115
115
|
limit?: number | string;
|
|
116
|
+
order?: 'ASC' | 'DESC';
|
|
116
117
|
}
|
|
117
118
|
interface IndexerServerLeaderboardRankParams {
|
|
118
119
|
subaccount: string;
|
|
@@ -120,11 +121,15 @@ interface IndexerServerLeaderboardRankParams {
|
|
|
120
121
|
}
|
|
121
122
|
interface IndexerServerLeaderboardContestsParams {
|
|
122
123
|
contest_ids: number[];
|
|
124
|
+
active?: boolean;
|
|
123
125
|
}
|
|
124
|
-
interface
|
|
126
|
+
interface IndexerServerLeaderboardRegistrationsParams {
|
|
125
127
|
subaccount: string;
|
|
126
|
-
|
|
127
|
-
|
|
128
|
+
contest_ids: number[];
|
|
129
|
+
active?: boolean;
|
|
130
|
+
}
|
|
131
|
+
interface IndexerServerLeaderboardRegisterParams {
|
|
132
|
+
update_registration: SignedTx<EIP712LeaderboardAuthenticationValues>;
|
|
128
133
|
}
|
|
129
134
|
interface IndexerServerFastWithdrawalSignatureParams {
|
|
130
135
|
/**
|
|
@@ -159,7 +164,8 @@ interface IndexerServerQueryRequestByType {
|
|
|
159
164
|
leaderboard: IndexerServerLeaderboardParams;
|
|
160
165
|
leaderboard_contests: IndexerServerLeaderboardContestsParams;
|
|
161
166
|
leaderboard_rank: IndexerServerLeaderboardRankParams;
|
|
162
|
-
|
|
167
|
+
leaderboard_register: IndexerServerLeaderboardRegisterParams;
|
|
168
|
+
leaderboard_registrations: IndexerServerLeaderboardRegistrationsParams;
|
|
163
169
|
linked_signer_rate_limit: IndexerServerLinkedSignerParams;
|
|
164
170
|
maker_statistics: IndexerServerMakerStatisticsParams;
|
|
165
171
|
market_snapshots: IndexerServerMarketSnapshotsParams;
|
|
@@ -260,9 +266,10 @@ interface IndexerServerMakerStatisticsResponse {
|
|
|
260
266
|
interface IndexerServerLeaderboardResponse {
|
|
261
267
|
positions: IndexerServerLeaderboardPosition[];
|
|
262
268
|
}
|
|
263
|
-
interface
|
|
264
|
-
|
|
269
|
+
interface IndexerServerLeaderboardRegistrationsResponse {
|
|
270
|
+
registrations: IndexerServerLeaderboardRegistration[];
|
|
265
271
|
}
|
|
272
|
+
type IndexerServerLeaderboardRegisterResponse = IndexerServerLeaderboardRegistrationsResponse;
|
|
266
273
|
interface IndexerServerLeaderboardRankResponse {
|
|
267
274
|
positions: Record<string, IndexerServerLeaderboardPosition>;
|
|
268
275
|
}
|
|
@@ -328,7 +335,8 @@ interface IndexerServerQueryResponseByType {
|
|
|
328
335
|
leaderboard: IndexerServerLeaderboardResponse;
|
|
329
336
|
leaderboard_contests: IndexerServerLeaderboardContestsResponse;
|
|
330
337
|
leaderboard_rank: IndexerServerLeaderboardRankResponse;
|
|
331
|
-
|
|
338
|
+
leaderboard_register: IndexerServerLeaderboardRegisterResponse;
|
|
339
|
+
leaderboard_registrations: IndexerServerLeaderboardRegistrationsResponse;
|
|
332
340
|
linked_signer_rate_limit: IndexerServerLinkedSignerResponse;
|
|
333
341
|
maker_statistics: IndexerServerMakerStatisticsResponse;
|
|
334
342
|
market_snapshots: IndexerServerMarketSnapshotsResponse;
|
|
@@ -401,4 +409,4 @@ interface IndexerServerV2Symbol {
|
|
|
401
409
|
*/
|
|
402
410
|
type IndexerServerV2SymbolsResponse = Record<string, IndexerServerV2Symbol>;
|
|
403
411
|
|
|
404
|
-
export type { IndexerEdgeServerCandlesticksParams, IndexerEdgeServerCandlesticksResponse, IndexerEdgeServerMarketSnapshotsParams, IndexerEdgeServerMarketSnapshotsResponse, IndexerServerAllTimePoints, IndexerServerBacklogResponse, IndexerServerCandlesticksParams, IndexerServerCandlesticksResponse, IndexerServerDDAQueryParams, IndexerServerDDAResponse, IndexerServerEventsParams, IndexerServerEventsResponse, IndexerServerFastWithdrawalSignatureParams, IndexerServerFastWithdrawalSignatureResponse, IndexerServerFundingRate, IndexerServerFundingRateParams, IndexerServerFundingRateResponse, IndexerServerFundingRatesParams, IndexerServerFundingRatesResponse, IndexerServerInterestFundingParams, IndexerServerInterestFundingResponse, IndexerServerLeaderboardContestsParams, IndexerServerLeaderboardContestsResponse, IndexerServerLeaderboardParams, IndexerServerLeaderboardRankParams, IndexerServerLeaderboardRankResponse,
|
|
412
|
+
export type { IndexerEdgeServerCandlesticksParams, IndexerEdgeServerCandlesticksResponse, IndexerEdgeServerMarketSnapshotsParams, IndexerEdgeServerMarketSnapshotsResponse, IndexerServerAllTimePoints, IndexerServerBacklogResponse, IndexerServerCandlesticksParams, IndexerServerCandlesticksResponse, IndexerServerDDAQueryParams, IndexerServerDDAResponse, IndexerServerEventsParams, IndexerServerEventsResponse, IndexerServerFastWithdrawalSignatureParams, IndexerServerFastWithdrawalSignatureResponse, IndexerServerFundingRate, IndexerServerFundingRateParams, IndexerServerFundingRateResponse, IndexerServerFundingRatesParams, IndexerServerFundingRatesResponse, IndexerServerInterestFundingParams, IndexerServerInterestFundingResponse, IndexerServerLeaderboardContestsParams, IndexerServerLeaderboardContestsResponse, IndexerServerLeaderboardParams, IndexerServerLeaderboardRankParams, IndexerServerLeaderboardRankResponse, IndexerServerLeaderboardRegisterParams, IndexerServerLeaderboardRegisterResponse, IndexerServerLeaderboardRegistrationsParams, IndexerServerLeaderboardRegistrationsResponse, IndexerServerLeaderboardResponse, IndexerServerLinkedSignerParams, IndexerServerLinkedSignerResponse, IndexerServerListSubaccountsParams, IndexerServerListSubaccountsResponse, IndexerServerMakerStatisticsParams, IndexerServerMakerStatisticsResponse, IndexerServerMarketSnapshotsParams, IndexerServerMarketSnapshotsResponse, IndexerServerMatchEventsParams, IndexerServerMatchEventsResponse, IndexerServerMultiProductsParams, IndexerServerMultiProductsResponse, IndexerServerMultiSubaccountSnapshotsParams, IndexerServerMultiSubaccountSnapshotsResponse, IndexerServerNlpSnapshotsParams, IndexerServerNlpSnapshotsResponse, IndexerServerOraclePricesParams, IndexerServerOraclePricesResponse, IndexerServerOrdersParams, IndexerServerOrdersResponse, IndexerServerPerpPrices, IndexerServerPerpPricesParams, IndexerServerPerpPricesResponse, IndexerServerPointsEpoch, IndexerServerPointsParams, IndexerServerPointsResponse, IndexerServerPriceParams, IndexerServerPriceResponse, IndexerServerPrivateAlphaChoiceParams, IndexerServerPrivateAlphaChoiceResponse, IndexerServerProductsParams, IndexerServerProductsResponse, IndexerServerQueryRequestByType, IndexerServerQueryRequestType, IndexerServerQueryResponseByType, IndexerServerQuotePriceResponse, IndexerServerReferralCodeParams, IndexerServerReferralCodeResponse, IndexerServerTriggerTypeFilter, IndexerServerV2MarketHours, IndexerServerV2Symbol, IndexerServerV2SymbolsResponse, IndexerServerV2TickerResponse, IndexerServerV2TickersResponse };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nadohq/indexer-client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"description": "> TODO: description",
|
|
@@ -41,8 +41,8 @@
|
|
|
41
41
|
"module": "./dist/index.js",
|
|
42
42
|
"types": "./dist/index.d.ts",
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@nadohq/engine-client": "^0.
|
|
45
|
-
"@nadohq/shared": "^0.
|
|
44
|
+
"@nadohq/engine-client": "^0.7.0",
|
|
45
|
+
"@nadohq/shared": "^0.7.0",
|
|
46
46
|
"axios": "*",
|
|
47
47
|
"ts-mixer": "*"
|
|
48
48
|
},
|
|
@@ -54,5 +54,5 @@
|
|
|
54
54
|
"bignumber.js": "workspace:*",
|
|
55
55
|
"viem": "workspace:*"
|
|
56
56
|
},
|
|
57
|
-
"gitHead": "
|
|
57
|
+
"gitHead": "2e4a8e4596ffdd83b3c83b20a0c1141ed671ec63"
|
|
58
58
|
}
|
package/src/IndexerBaseClient.ts
CHANGED
|
@@ -62,8 +62,8 @@ import {
|
|
|
62
62
|
GetIndexerLeaderboardParams,
|
|
63
63
|
GetIndexerLeaderboardParticipantParams,
|
|
64
64
|
GetIndexerLeaderboardParticipantResponse,
|
|
65
|
-
|
|
66
|
-
|
|
65
|
+
GetIndexerLeaderboardRegistrationsParams,
|
|
66
|
+
GetIndexerLeaderboardRegistrationsResponse,
|
|
67
67
|
GetIndexerLeaderboardResponse,
|
|
68
68
|
GetIndexerLinkedSignerParams,
|
|
69
69
|
GetIndexerLinkedSignerResponse,
|
|
@@ -117,8 +117,8 @@ import {
|
|
|
117
117
|
IndexerSubaccountSnapshot,
|
|
118
118
|
ListIndexerSubaccountsParams,
|
|
119
119
|
ListIndexerSubaccountsResponse,
|
|
120
|
-
|
|
121
|
-
|
|
120
|
+
RegisterLeaderboardParams,
|
|
121
|
+
RegisterLeaderboardResponse,
|
|
122
122
|
} from './types';
|
|
123
123
|
|
|
124
124
|
export interface IndexerClientOpts {
|
|
@@ -664,6 +664,7 @@ export class IndexerBaseClient {
|
|
|
664
664
|
rank_type: params.rankType,
|
|
665
665
|
start: params.startCursor,
|
|
666
666
|
limit: params.limit,
|
|
667
|
+
order: params.order,
|
|
667
668
|
});
|
|
668
669
|
|
|
669
670
|
return {
|
|
@@ -692,17 +693,18 @@ export class IndexerBaseClient {
|
|
|
692
693
|
}
|
|
693
694
|
|
|
694
695
|
/**
|
|
695
|
-
*
|
|
696
|
-
*
|
|
696
|
+
* Registers a subaccount for one or more contests. Requires EIP-712 signing.
|
|
697
|
+
*
|
|
698
|
+
* @param params - Registration parameters including contest IDs and signing config.
|
|
697
699
|
*/
|
|
698
|
-
async
|
|
699
|
-
params:
|
|
700
|
-
): Promise<
|
|
700
|
+
async registerLeaderboard(
|
|
701
|
+
params: RegisterLeaderboardParams,
|
|
702
|
+
): Promise<RegisterLeaderboardResponse> {
|
|
701
703
|
const signatureParams: EIP712LeaderboardAuthenticationParams = {
|
|
702
|
-
// Default to 90 seconds from now if no recvTime is provided
|
|
703
704
|
expiration: toIntegerString(params.recvTime ?? getDefaultRecvTime()),
|
|
704
705
|
subaccountName: params.subaccountName,
|
|
705
706
|
subaccountOwner: params.subaccountOwner,
|
|
707
|
+
contestIds: params.contestIds,
|
|
706
708
|
};
|
|
707
709
|
|
|
708
710
|
const tx = getNadoEIP712Values(
|
|
@@ -711,8 +713,8 @@ export class IndexerBaseClient {
|
|
|
711
713
|
);
|
|
712
714
|
const signature = await this.sign(
|
|
713
715
|
'leaderboard_authentication',
|
|
714
|
-
params.
|
|
715
|
-
params.
|
|
716
|
+
params.registration.verifyingAddr,
|
|
717
|
+
params.registration.chainId,
|
|
716
718
|
signatureParams,
|
|
717
719
|
);
|
|
718
720
|
|
|
@@ -722,40 +724,36 @@ export class IndexerBaseClient {
|
|
|
722
724
|
signature,
|
|
723
725
|
};
|
|
724
726
|
|
|
725
|
-
const baseResponse = await this.query('
|
|
726
|
-
subaccount: subaccountToHex({
|
|
727
|
-
subaccountOwner: params.subaccountOwner,
|
|
728
|
-
subaccountName: params.subaccountName,
|
|
729
|
-
}),
|
|
730
|
-
contest_id: params.contestId,
|
|
727
|
+
const baseResponse = await this.query('leaderboard_register', {
|
|
731
728
|
update_registration: updateRegistrationTx,
|
|
732
729
|
});
|
|
730
|
+
|
|
733
731
|
return {
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
732
|
+
registrations: baseResponse.registrations.map(
|
|
733
|
+
mapIndexerLeaderboardRegistration,
|
|
734
|
+
),
|
|
737
735
|
};
|
|
738
736
|
}
|
|
739
737
|
|
|
740
738
|
/**
|
|
741
|
-
* Retrieves
|
|
742
|
-
*
|
|
739
|
+
* Retrieves contest registrations for a subaccount. Supports batch lookup
|
|
740
|
+
* across multiple contests with an optional active filter.
|
|
741
|
+
*
|
|
742
|
+
* @param params - Query parameters including subaccount and contest IDs.
|
|
743
743
|
*/
|
|
744
|
-
async
|
|
745
|
-
params:
|
|
746
|
-
): Promise<
|
|
747
|
-
const baseResponse = await this.query('
|
|
748
|
-
subaccount: subaccountToHex(
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
}),
|
|
752
|
-
contest_id: params.contestId,
|
|
753
|
-
update_registration: null,
|
|
744
|
+
async getLeaderboardRegistrations(
|
|
745
|
+
params: GetIndexerLeaderboardRegistrationsParams,
|
|
746
|
+
): Promise<GetIndexerLeaderboardRegistrationsResponse> {
|
|
747
|
+
const baseResponse = await this.query('leaderboard_registrations', {
|
|
748
|
+
subaccount: subaccountToHex(params.subaccount),
|
|
749
|
+
contest_ids: params.contestIds,
|
|
750
|
+
active: params.active,
|
|
754
751
|
});
|
|
752
|
+
|
|
755
753
|
return {
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
754
|
+
registrations: baseResponse.registrations.map(
|
|
755
|
+
mapIndexerLeaderboardRegistration,
|
|
756
|
+
),
|
|
759
757
|
};
|
|
760
758
|
}
|
|
761
759
|
|
|
@@ -769,6 +767,7 @@ export class IndexerBaseClient {
|
|
|
769
767
|
): Promise<GetIndexerLeaderboardContestsResponse> {
|
|
770
768
|
const baseResponse = await this.query('leaderboard_contests', {
|
|
771
769
|
contest_ids: params.contestIds,
|
|
770
|
+
active: params.active,
|
|
772
771
|
});
|
|
773
772
|
|
|
774
773
|
return {
|
package/src/IndexerClient.ts
CHANGED
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
toBigNumber,
|
|
7
7
|
toIntegerString,
|
|
8
8
|
} from '@nadohq/shared';
|
|
9
|
+
import BigNumber from 'bignumber.js';
|
|
9
10
|
|
|
10
11
|
import { IndexerBaseClient } from './IndexerBaseClient';
|
|
11
12
|
import {
|
|
@@ -447,11 +448,18 @@ export class IndexerClient extends IndexerBaseClient {
|
|
|
447
448
|
startCursor: params.startCursor,
|
|
448
449
|
});
|
|
449
450
|
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
451
|
+
const overflowParticipant = baseResponse.participants[requestedLimit];
|
|
452
|
+
let nextCursor: BigNumber | undefined;
|
|
453
|
+
if (overflowParticipant) {
|
|
454
|
+
// If rankType specified, use it directly. Otherwise it's a single-track
|
|
455
|
+
// contest so grab the rank from the only track present.
|
|
456
|
+
const trackData = (
|
|
457
|
+
params.rankType
|
|
458
|
+
? overflowParticipant.tracks[params.rankType]
|
|
459
|
+
: Object.values(overflowParticipant.tracks)[0]
|
|
460
|
+
)!;
|
|
461
|
+
nextCursor = trackData.rank;
|
|
462
|
+
}
|
|
455
463
|
|
|
456
464
|
return {
|
|
457
465
|
...baseResponse,
|
package/src/dataMappers.ts
CHANGED
|
@@ -256,16 +256,24 @@ export function mapIndexerMakerStatistics(
|
|
|
256
256
|
export function mapIndexerLeaderboardPosition(
|
|
257
257
|
position: IndexerServerLeaderboardPosition,
|
|
258
258
|
): IndexerLeaderboardParticipant {
|
|
259
|
+
const tracks = mapValues(position.tracks, (trackData) => ({
|
|
260
|
+
value: toBigNumber(trackData.value),
|
|
261
|
+
rank: toBigNumber(trackData.rank),
|
|
262
|
+
qualificationStatus: trackData.qualification_status,
|
|
263
|
+
}));
|
|
264
|
+
|
|
259
265
|
return {
|
|
260
266
|
subaccount: subaccountFromHex(position.subaccount),
|
|
261
267
|
contestId: position.contest_id,
|
|
262
|
-
pnl: toBigNumber(position.pnl),
|
|
263
|
-
pnlRank: toBigNumber(position.pnl_rank),
|
|
264
|
-
percentRoi: toBigNumber(position.roi),
|
|
265
|
-
roiRank: toBigNumber(position.roi_rank),
|
|
266
268
|
accountValue: toBigNumber(position.account_value),
|
|
267
|
-
volume: position.volume ? toBigNumber(position.volume) : undefined,
|
|
268
269
|
updateTime: toBigNumber(position.update_time),
|
|
270
|
+
tracks,
|
|
271
|
+
socialAccounts: position.social_accounts.map((account) => ({
|
|
272
|
+
provider: account.provider,
|
|
273
|
+
username: account.username,
|
|
274
|
+
displayName: account.display_name,
|
|
275
|
+
profileImageUrl: account.profile_image_url,
|
|
276
|
+
})),
|
|
269
277
|
};
|
|
270
278
|
}
|
|
271
279
|
|
|
@@ -282,17 +290,25 @@ export function mapIndexerLeaderboardRegistration(
|
|
|
282
290
|
export function mapIndexerLeaderboardContest(
|
|
283
291
|
contest: IndexerServerLeaderboardContest,
|
|
284
292
|
): IndexerLeaderboardContest {
|
|
293
|
+
const startTime = toBigNumber(contest.start_time);
|
|
294
|
+
const endTime = toBigNumber(contest.end_time);
|
|
295
|
+
|
|
285
296
|
return {
|
|
286
297
|
contestId: contest.contest_id,
|
|
287
|
-
startTime
|
|
288
|
-
endTime
|
|
289
|
-
period: toBigNumber(contest.threshold),
|
|
298
|
+
startTime,
|
|
299
|
+
endTime,
|
|
290
300
|
totalParticipants: toBigNumber(contest.count),
|
|
291
|
-
minRequiredAccountValue: toBigNumber(contest.threshold),
|
|
292
|
-
minRequiredVolume: toBigNumber(contest.volume_threshold),
|
|
293
301
|
requiredProductIds: contest.product_ids,
|
|
294
302
|
active: contest.active,
|
|
295
303
|
lastUpdated: toBigNumber(contest.last_updated),
|
|
304
|
+
title: contest.title,
|
|
305
|
+
description: contest.description,
|
|
306
|
+
tracks: contest.tracks.map((track) => ({
|
|
307
|
+
trackId: track.track_id,
|
|
308
|
+
rankType: track.rank_type,
|
|
309
|
+
sortOrder: track.sort_order,
|
|
310
|
+
minRequiredAccountValue: toBigNumber(track.threshold),
|
|
311
|
+
})),
|
|
296
312
|
};
|
|
297
313
|
}
|
|
298
314
|
|
|
@@ -1,2 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Leaderboard ranking metric.
|
|
3
|
+
* - `pnl` ranks by absolute PnL value
|
|
4
|
+
* - `roi` ranks by percentage ROI value
|
|
5
|
+
* - `volume` ranks by trading volume
|
|
6
|
+
* - `liquidation` ranks by liquidation count
|
|
7
|
+
* - `balance` ranks by spot balance
|
|
8
|
+
*/
|
|
9
|
+
export type IndexerLeaderboardRankType =
|
|
10
|
+
| 'pnl'
|
|
11
|
+
| 'roi'
|
|
12
|
+
| 'volume'
|
|
13
|
+
| 'liquidation'
|
|
14
|
+
| 'balance';
|
package/src/types/clientTypes.ts
CHANGED
|
@@ -558,26 +558,43 @@ export interface GetIndexerMakerStatisticsResponse {
|
|
|
558
558
|
|
|
559
559
|
export interface GetIndexerLeaderboardParams {
|
|
560
560
|
contestId: number;
|
|
561
|
-
|
|
561
|
+
/**
|
|
562
|
+
* The ranking metric to query by.
|
|
563
|
+
* Optional for single-track contests (auto-selects the only track).
|
|
564
|
+
* Required for multi-track contests — omitting it returns an error.
|
|
565
|
+
*/
|
|
566
|
+
rankType?: IndexerLeaderboardRankType;
|
|
562
567
|
// Min rank inclusive
|
|
563
568
|
startCursor?: string;
|
|
564
569
|
limit?: number;
|
|
570
|
+
/** Sort order. Defaults to `'DESC'`. */
|
|
571
|
+
order?: 'ASC' | 'DESC';
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
export interface IndexerSocialAccountInfo {
|
|
575
|
+
provider: 'twitter';
|
|
576
|
+
username: string;
|
|
577
|
+
displayName: string;
|
|
578
|
+
profileImageUrl: string;
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
export interface IndexerLeaderboardTrackPosition {
|
|
582
|
+
value: BigNumber;
|
|
583
|
+
rank: BigNumber;
|
|
584
|
+
qualificationStatus: 'qualified' | 'insufficient_account_value';
|
|
565
585
|
}
|
|
566
586
|
|
|
567
587
|
export interface IndexerLeaderboardParticipant {
|
|
568
588
|
subaccount: Subaccount;
|
|
569
589
|
contestId: number;
|
|
570
|
-
pnl: BigNumber;
|
|
571
|
-
pnlRank: BigNumber;
|
|
572
|
-
percentRoi: BigNumber;
|
|
573
|
-
roiRank: BigNumber;
|
|
574
590
|
// Float indicating the ending account value at the time the snapshot was taken i.e: at updateTime
|
|
575
591
|
accountValue: BigNumber;
|
|
576
|
-
// Float indicating the trading volume at the time the snapshot was taken i.e: at updateTime.
|
|
577
|
-
// Null for contests that have no volume requirement.
|
|
578
|
-
volume?: BigNumber;
|
|
579
592
|
// Seconds
|
|
580
593
|
updateTime: BigNumber;
|
|
594
|
+
tracks: Partial<
|
|
595
|
+
Record<IndexerLeaderboardRankType, IndexerLeaderboardTrackPosition>
|
|
596
|
+
>;
|
|
597
|
+
socialAccounts: IndexerSocialAccountInfo[];
|
|
581
598
|
}
|
|
582
599
|
|
|
583
600
|
export interface GetIndexerLeaderboardResponse {
|
|
@@ -601,13 +618,17 @@ interface LeaderboardSignatureParams {
|
|
|
601
618
|
chainId: number;
|
|
602
619
|
}
|
|
603
620
|
|
|
604
|
-
export interface
|
|
605
|
-
|
|
621
|
+
export interface GetIndexerLeaderboardRegistrationsParams {
|
|
622
|
+
subaccount: Subaccount;
|
|
623
|
+
contestIds: number[];
|
|
624
|
+
/** Filter to active contests only. Defaults to `true`. */
|
|
625
|
+
active?: boolean;
|
|
606
626
|
}
|
|
607
627
|
|
|
608
|
-
export interface
|
|
609
|
-
|
|
610
|
-
|
|
628
|
+
export interface RegisterLeaderboardParams extends Subaccount {
|
|
629
|
+
contestIds: number[];
|
|
630
|
+
registration: LeaderboardSignatureParams;
|
|
631
|
+
/** In millis, defaults to 90s in the future. */
|
|
611
632
|
recvTime?: BigNumber;
|
|
612
633
|
}
|
|
613
634
|
|
|
@@ -618,39 +639,42 @@ export interface IndexerLeaderboardRegistration {
|
|
|
618
639
|
updateTime: BigNumber;
|
|
619
640
|
}
|
|
620
641
|
|
|
621
|
-
export interface
|
|
622
|
-
|
|
623
|
-
// For tiered contests (i.e., related contests), null if the user is not registered for any of the contests in the tier group.
|
|
624
|
-
registration: IndexerLeaderboardRegistration | null;
|
|
642
|
+
export interface GetIndexerLeaderboardRegistrationsResponse {
|
|
643
|
+
registrations: IndexerLeaderboardRegistration[];
|
|
625
644
|
}
|
|
626
645
|
|
|
627
|
-
export type
|
|
628
|
-
|
|
646
|
+
export type RegisterLeaderboardResponse =
|
|
647
|
+
GetIndexerLeaderboardRegistrationsResponse;
|
|
629
648
|
|
|
630
649
|
export interface GetIndexerLeaderboardContestsParams {
|
|
631
650
|
contestIds: number[];
|
|
651
|
+
/** Filter to active contests only. Defaults to `true`. Pass `false` to include inactive contests. */
|
|
652
|
+
active?: boolean;
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
export interface IndexerLeaderboardContestTrack {
|
|
656
|
+
trackId: number;
|
|
657
|
+
rankType: IndexerLeaderboardRankType;
|
|
658
|
+
sortOrder: 'ASC' | 'DESC';
|
|
659
|
+
// Float indicating the min account value required to qualify for this track e.g: 250.0
|
|
660
|
+
minRequiredAccountValue: BigNumber;
|
|
632
661
|
}
|
|
633
662
|
|
|
634
663
|
export interface IndexerLeaderboardContest {
|
|
635
664
|
contestId: number;
|
|
636
|
-
// NOTE: Start / End times are ignored when `period` is non-zero.
|
|
637
665
|
// Start time in seconds
|
|
638
666
|
startTime: BigNumber;
|
|
639
667
|
// End time in seconds
|
|
640
668
|
endTime: BigNumber;
|
|
641
|
-
//
|
|
642
|
-
// Otherwise, contest runs indefinitely in the interval [lastUpdated - period, lastUpdated] if active;
|
|
643
|
-
period: BigNumber;
|
|
644
|
-
// Last updated time in Seconds
|
|
669
|
+
// Last updated time in seconds
|
|
645
670
|
lastUpdated: BigNumber;
|
|
646
671
|
totalParticipants: BigNumber;
|
|
647
|
-
// Float indicating the min account value required to be eligible for this contest e.g: 250.0
|
|
648
|
-
minRequiredAccountValue: BigNumber;
|
|
649
|
-
// Float indicating the min trading volume required to be eligible for this contest e.g: 1000.0
|
|
650
|
-
minRequiredVolume: BigNumber;
|
|
651
672
|
// For market-specific contests, only the volume from these products will be counted.
|
|
652
673
|
requiredProductIds: number[];
|
|
653
674
|
active: boolean;
|
|
675
|
+
title: string;
|
|
676
|
+
description: string;
|
|
677
|
+
tracks: IndexerLeaderboardContestTrack[];
|
|
654
678
|
}
|
|
655
679
|
|
|
656
680
|
export interface GetIndexerLeaderboardContestsResponse {
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
} from '@nadohq/engine-client';
|
|
7
7
|
import { EIP712OrderValues } from '@nadohq/shared';
|
|
8
8
|
import { IndexerEventType } from './IndexerEventType';
|
|
9
|
+
import { IndexerLeaderboardRankType } from './IndexerLeaderboardType';
|
|
9
10
|
import { NadoTx } from './NadoTx';
|
|
10
11
|
|
|
11
12
|
export interface IndexerServerSnapshotsInterval {
|
|
@@ -249,29 +250,48 @@ export interface IndexerServerMaker {
|
|
|
249
250
|
* Leaderboard
|
|
250
251
|
*/
|
|
251
252
|
|
|
253
|
+
export interface IndexerServerSocialAccount {
|
|
254
|
+
provider: 'twitter';
|
|
255
|
+
username: string;
|
|
256
|
+
display_name: string;
|
|
257
|
+
profile_image_url: string;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
export interface IndexerServerLeaderboardTrackPosition {
|
|
261
|
+
value: string;
|
|
262
|
+
rank: string;
|
|
263
|
+
qualification_status: 'qualified' | 'insufficient_account_value';
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
export interface IndexerServerLeaderboardContestTrack {
|
|
267
|
+
track_id: number;
|
|
268
|
+
rank_type: IndexerLeaderboardRankType;
|
|
269
|
+
sort_order: 'ASC' | 'DESC';
|
|
270
|
+
threshold: string;
|
|
271
|
+
}
|
|
272
|
+
|
|
252
273
|
export interface IndexerServerLeaderboardPosition {
|
|
253
274
|
subaccount: string;
|
|
254
275
|
contest_id: number;
|
|
255
|
-
pnl: string;
|
|
256
|
-
pnl_rank: string;
|
|
257
|
-
roi: string;
|
|
258
|
-
roi_rank: string;
|
|
259
276
|
account_value: string;
|
|
260
|
-
volume?: string;
|
|
261
277
|
update_time: string;
|
|
278
|
+
tracks: Partial<
|
|
279
|
+
Record<IndexerLeaderboardRankType, IndexerServerLeaderboardTrackPosition>
|
|
280
|
+
>;
|
|
281
|
+
social_accounts: IndexerServerSocialAccount[];
|
|
262
282
|
}
|
|
263
283
|
|
|
264
284
|
export interface IndexerServerLeaderboardContest {
|
|
265
285
|
contest_id: number;
|
|
266
286
|
start_time: string;
|
|
267
287
|
end_time: string;
|
|
268
|
-
timeframe: string;
|
|
269
288
|
count: string;
|
|
270
|
-
threshold: string;
|
|
271
|
-
volume_threshold: string;
|
|
272
|
-
product_ids: number[];
|
|
273
289
|
last_updated: string;
|
|
290
|
+
product_ids: number[];
|
|
274
291
|
active: boolean;
|
|
292
|
+
title: string;
|
|
293
|
+
description: string;
|
|
294
|
+
tracks: IndexerServerLeaderboardContestTrack[];
|
|
275
295
|
}
|
|
276
296
|
|
|
277
297
|
export interface IndexerServerLeaderboardRegistration {
|