@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.
Files changed (38) hide show
  1. package/dist/IndexerBaseClient.cjs +28 -27
  2. package/dist/IndexerBaseClient.cjs.map +1 -1
  3. package/dist/IndexerBaseClient.d.cts +10 -7
  4. package/dist/IndexerBaseClient.d.ts +10 -7
  5. package/dist/IndexerBaseClient.js +28 -27
  6. package/dist/IndexerBaseClient.js.map +1 -1
  7. package/dist/IndexerClient.cjs +6 -1
  8. package/dist/IndexerClient.cjs.map +1 -1
  9. package/dist/IndexerClient.js +6 -1
  10. package/dist/IndexerClient.js.map +1 -1
  11. package/dist/dataMappers.cjs +26 -12
  12. package/dist/dataMappers.cjs.map +1 -1
  13. package/dist/dataMappers.js +26 -12
  14. package/dist/dataMappers.js.map +1 -1
  15. package/dist/index.d.cts +3 -3
  16. package/dist/index.d.ts +3 -3
  17. package/dist/types/IndexerLeaderboardType.cjs.map +1 -1
  18. package/dist/types/IndexerLeaderboardType.d.cts +9 -1
  19. package/dist/types/IndexerLeaderboardType.d.ts +9 -1
  20. package/dist/types/clientTypes.cjs.map +1 -1
  21. package/dist/types/clientTypes.d.cts +45 -17
  22. package/dist/types/clientTypes.d.ts +45 -17
  23. package/dist/types/index.d.cts +3 -3
  24. package/dist/types/index.d.ts +3 -3
  25. package/dist/types/serverModelTypes.cjs.map +1 -1
  26. package/dist/types/serverModelTypes.d.cts +25 -10
  27. package/dist/types/serverModelTypes.d.ts +25 -10
  28. package/dist/types/serverTypes.cjs.map +1 -1
  29. package/dist/types/serverTypes.d.cts +17 -9
  30. package/dist/types/serverTypes.d.ts +17 -9
  31. package/package.json +4 -4
  32. package/src/IndexerBaseClient.ts +35 -36
  33. package/src/IndexerClient.ts +13 -5
  34. package/src/dataMappers.ts +26 -10
  35. package/src/types/IndexerLeaderboardType.ts +14 -2
  36. package/src/types/clientTypes.ts +52 -28
  37. package/src/types/serverModelTypes.ts +29 -9
  38. 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: IndexerLeaderboardRankType;
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 IndexerServerLeaderboardRegistrationParams {
126
+ interface IndexerServerLeaderboardRegistrationsParams {
125
127
  subaccount: string;
126
- contest_id: number;
127
- update_registration: SignedTx<EIP712LeaderboardAuthenticationValues> | null;
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
- leaderboard_registration: IndexerServerLeaderboardRegistrationParams;
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 IndexerServerLeaderboardRegistrationResponse {
264
- registration: IndexerServerLeaderboardRegistration | null;
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
- leaderboard_registration: IndexerServerLeaderboardRegistrationResponse;
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, IndexerServerLeaderboardRegistrationParams, IndexerServerLeaderboardRegistrationResponse, 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 };
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: IndexerLeaderboardRankType;
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 IndexerServerLeaderboardRegistrationParams {
126
+ interface IndexerServerLeaderboardRegistrationsParams {
125
127
  subaccount: string;
126
- contest_id: number;
127
- update_registration: SignedTx<EIP712LeaderboardAuthenticationValues> | null;
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
- leaderboard_registration: IndexerServerLeaderboardRegistrationParams;
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 IndexerServerLeaderboardRegistrationResponse {
264
- registration: IndexerServerLeaderboardRegistration | null;
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
- leaderboard_registration: IndexerServerLeaderboardRegistrationResponse;
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, IndexerServerLeaderboardRegistrationParams, IndexerServerLeaderboardRegistrationResponse, 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 };
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.6.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.6.0",
45
- "@nadohq/shared": "^0.6.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": "1ddd5c3e543913867665b7fe00b16cbaa9fc0b9f"
57
+ "gitHead": "2e4a8e4596ffdd83b3c83b20a0c1141ed671ec63"
58
58
  }
@@ -62,8 +62,8 @@ import {
62
62
  GetIndexerLeaderboardParams,
63
63
  GetIndexerLeaderboardParticipantParams,
64
64
  GetIndexerLeaderboardParticipantResponse,
65
- GetIndexerLeaderboardRegistrationParams,
66
- GetIndexerLeaderboardRegistrationResponse,
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
- UpdateIndexerLeaderboardRegistrationParams,
121
- UpdateIndexerLeaderboardRegistrationResponse,
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
- * Attempts to update a user's registration to the provided `contestId`. This requires signing.
696
- * @param params
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 updateLeaderboardRegistration(
699
- params: UpdateIndexerLeaderboardRegistrationParams,
700
- ): Promise<UpdateIndexerLeaderboardRegistrationResponse> {
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.updateRegistration.verifyingAddr,
715
- params.updateRegistration.chainId,
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('leaderboard_registration', {
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
- registration: baseResponse.registration
735
- ? mapIndexerLeaderboardRegistration(baseResponse.registration)
736
- : null,
732
+ registrations: baseResponse.registrations.map(
733
+ mapIndexerLeaderboardRegistration,
734
+ ),
737
735
  };
738
736
  }
739
737
 
740
738
  /**
741
- * Retrieves the registration status for a leaderboard participant for provided `contestId`.
742
- * @param params
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 getLeaderboardRegistration(
745
- params: GetIndexerLeaderboardRegistrationParams,
746
- ): Promise<GetIndexerLeaderboardRegistrationResponse> {
747
- const baseResponse = await this.query('leaderboard_registration', {
748
- subaccount: subaccountToHex({
749
- subaccountOwner: params.subaccountOwner,
750
- subaccountName: params.subaccountName,
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
- registration: baseResponse.registration
757
- ? mapIndexerLeaderboardRegistration(baseResponse.registration)
758
- : null,
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 {
@@ -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
- // Next cursor is the rank number of the (requestedLimit+1)th item
451
- const nextCursor =
452
- params.rankType === 'pnl'
453
- ? baseResponse.participants[requestedLimit]?.pnlRank
454
- : baseResponse.participants[requestedLimit]?.roiRank;
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,
@@ -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: toBigNumber(contest.start_time),
288
- endTime: toBigNumber(contest.end_time),
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
- // `pnl` ranks by the absolute pnl value, whereas `roi` ranks by the % roi value
2
- export type IndexerLeaderboardRankType = 'pnl' | 'roi';
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';
@@ -558,26 +558,43 @@ export interface GetIndexerMakerStatisticsResponse {
558
558
 
559
559
  export interface GetIndexerLeaderboardParams {
560
560
  contestId: number;
561
- rankType: IndexerLeaderboardRankType;
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 GetIndexerLeaderboardRegistrationParams extends Subaccount {
605
- contestId: number;
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 UpdateIndexerLeaderboardRegistrationParams extends GetIndexerLeaderboardRegistrationParams {
609
- updateRegistration: LeaderboardSignatureParams;
610
- // In millis, defaults to 90s in the future
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 GetIndexerLeaderboardRegistrationResponse {
622
- // For non-tiered contests, null if the user is not registered for the provided contestId.
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 UpdateIndexerLeaderboardRegistrationResponse =
628
- GetIndexerLeaderboardRegistrationResponse;
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
- // Contest duration in seconds; when set to 0, contest duration is [startTime,endTime];
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 {