@agg-build/hooks 4.18.2 → 4.19.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/index.js CHANGED
@@ -79,14 +79,15 @@ __export(src_exports, {
79
79
  CONFIRMED_MATCH_STATUSES: () => CONFIRMED_MATCH_STATUSES,
80
80
  DEFAULT_AGG_ROOT_CLASS_NAME: () => DEFAULT_AGG_ROOT_CLASS_NAME,
81
81
  EventListStateProvider: () => EventListStateProvider,
82
+ LEADERBOARD_PERIODS: () => LEADERBOARD_PERIODS,
82
83
  MAX_ORDER_VENUE_MARKET_IDS_PER_REQUEST: () => MAX_ORDER_VENUE_MARKET_IDS_PER_REQUEST,
83
84
  MAX_PRICE_GAP_PCT: () => MAX_PRICE_GAP_PCT,
84
85
  MIN_PRICE_GAP_PCT: () => MIN_PRICE_GAP_PCT,
85
86
  MarketStatus: () => MarketStatus,
86
87
  MatchStatus: () => MatchStatus,
87
88
  MatchType: () => MatchType,
88
- QueryClient: () => import_react_query51.QueryClient,
89
- QueryClientProvider: () => import_react_query51.QueryClientProvider,
89
+ QueryClient: () => import_react_query52.QueryClient,
90
+ QueryClientProvider: () => import_react_query52.QueryClientProvider,
90
91
  RedeemRejectedError: () => RedeemRejectedError,
91
92
  SPORTS_LIVE_POLL_INTERVAL_MS: () => SPORTS_LIVE_POLL_INTERVAL_MS,
92
93
  SPORTS_SCHEDULED_POLL_INTERVAL_MS: () => SPORTS_SCHEDULED_POLL_INTERVAL_MS,
@@ -117,6 +118,8 @@ __export(src_exports, {
117
118
  invalidateUserClaimState: () => invalidateUserClaimState,
118
119
  invalidateUserMoneyState: () => invalidateUserMoneyState,
119
120
  isVenueDisabledByConfig: () => isVenueDisabledByConfig,
121
+ leaderboardQueryKeys: () => leaderboardQueryKeys,
122
+ leaderboardRange: () => leaderboardRange,
120
123
  mergeBestPricesPreferringLive: () => mergeBestPricesPreferringLive,
121
124
  mergeRecurringCryptoWindows: () => mergeRecurringCryptoWindows,
122
125
  normalizeVenueId: () => normalizeVenueId,
@@ -177,6 +180,7 @@ __export(src_exports, {
177
180
  useHostedVenueActivity: () => useHostedVenueActivity,
178
181
  useHostedVenueTransfers: () => useHostedVenueTransfers,
179
182
  useLabels: () => useLabels,
183
+ useLeaderboard: () => useLeaderboard,
180
184
  useLimitOrderVenueQuotes: () => useLimitOrderVenueQuotes,
181
185
  useLinkAccount: () => useLinkAccount,
182
186
  useLiveBestPriceCandidates: () => useLiveBestPriceCandidates,
@@ -206,7 +210,7 @@ __export(src_exports, {
206
210
  usePaperOnboarding: () => usePaperOnboarding,
207
211
  usePlaceLimitOrder: () => usePlaceLimitOrder,
208
212
  usePositions: () => usePositions,
209
- useQueryClient: () => import_react_query51.useQueryClient,
213
+ useQueryClient: () => import_react_query52.useQueryClient,
210
214
  useRampQuotes: () => useRampQuotes,
211
215
  useRampSession: () => useRampSession,
212
216
  useRecurringCryptoMarkets: () => useRecurringCryptoMarkets,
@@ -405,7 +409,7 @@ var getVenueOrder = (venue) => {
405
409
  var sortVenues = (venues) => [...venues].sort((a, b) => getVenueOrder(a) - getVenueOrder(b));
406
410
 
407
411
  // src/index.ts
408
- var import_react_query51 = require("@tanstack/react-query");
412
+ var import_react_query52 = require("@tanstack/react-query");
409
413
 
410
414
  // src/candle-store.ts
411
415
  var import_sdk = require("@agg-build/sdk");
@@ -1221,6 +1225,31 @@ var enUsLabels = {
1221
1225
  readFullDetails: "Read full details",
1222
1226
  showLess: "Show less"
1223
1227
  },
1228
+ leaderboard: {
1229
+ title: "Leaderboard",
1230
+ subtitle: (appName, periodLabel) => `Top traders${appName ? ` on ${appName}` : ""} \xB7 ${periodLabel} \xB7 updates every 5 minutes`,
1231
+ periodLabel: "Period",
1232
+ rankByLabel: "Rank by",
1233
+ periods: { "1d": "24h", "7d": "7d", "30d": "30d", all: "All time" },
1234
+ metrics: { realizedPnl: "Profit & loss", volume: "Volume" },
1235
+ columns: {
1236
+ rank: "#",
1237
+ trader: "Trader",
1238
+ orders: "Trades",
1239
+ volume: "Volume",
1240
+ realizedPnl: "P&L"
1241
+ },
1242
+ tradesCount: (count) => `${count} ${count === 1 ? "trade" : "trades"}`,
1243
+ anonymousTrader: "Anonymous trader",
1244
+ you: "You",
1245
+ showMore: "Show more traders",
1246
+ loadingAria: "Loading leaderboard",
1247
+ emptyTitle: "No trades in this period yet",
1248
+ emptyDescription: "Rankings appear once traders place orders. Try a longer period or check back later.",
1249
+ errorTitle: "Couldn't load the leaderboard",
1250
+ errorDescription: "Something went wrong on our side. Try again in a moment.",
1251
+ pnlFootnote: "P&L is realized only: sells and settled markets, before fees. Volume counts both buys and sells. Trades are filled orders. Figures refresh every 5 minutes."
1252
+ },
1224
1253
  marketDetails: {
1225
1254
  loading: "Loading market details",
1226
1255
  unavailableAria: "Market details unavailable",
@@ -6757,6 +6786,56 @@ function useUserActivity(options = {}) {
6757
6786
  });
6758
6787
  }
6759
6788
 
6789
+ // src/use-leaderboard.ts
6790
+ var import_react_query30 = require("@tanstack/react-query");
6791
+ var LEADERBOARD_PERIODS = ["1d", "7d", "30d", "all"];
6792
+ var utcDayKey = (d) => d.toISOString().slice(0, 10);
6793
+ function leaderboardRange(period, now = /* @__PURE__ */ new Date()) {
6794
+ if (period === "all") return {};
6795
+ const spanDays = period === "1d" ? 0 : period === "7d" ? 6 : 29;
6796
+ const from = new Date(
6797
+ Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate() - spanDays)
6798
+ );
6799
+ return { from: utcDayKey(from), to: utcDayKey(now) };
6800
+ }
6801
+ var leaderboardQueryKeys = {
6802
+ all: () => ["leaderboard"],
6803
+ list: (period, metric, limit) => ["leaderboard", period, metric, limit]
6804
+ };
6805
+ var LEADERBOARD_STALE_TIME_MS = 6e4;
6806
+ function useLeaderboard(options = {}) {
6807
+ var _a, _b;
6808
+ const client = useAggClient();
6809
+ const { period = "30d", metric = "realizedPnl", limit = 50, enabled = true } = options;
6810
+ const query = (0, import_react_query30.useInfiniteQuery)({
6811
+ queryKey: leaderboardQueryKeys.list(period, metric, limit),
6812
+ queryFn: ({ pageParam }) => client.getLeaderboard(__spreadProps(__spreadValues({}, leaderboardRange(period)), {
6813
+ metric,
6814
+ limit,
6815
+ cursor: pageParam
6816
+ })),
6817
+ initialPageParam: void 0,
6818
+ getNextPageParam: (lastPage) => {
6819
+ var _a2;
6820
+ return lastPage.hasMore ? (_a2 = lastPage.nextCursor) != null ? _a2 : void 0 : void 0;
6821
+ },
6822
+ enabled,
6823
+ // Keep the previous list on screen while a period/metric switch loads.
6824
+ placeholderData: import_react_query30.keepPreviousData,
6825
+ staleTime: LEADERBOARD_STALE_TIME_MS
6826
+ });
6827
+ const seen = /* @__PURE__ */ new Set();
6828
+ const rows = ((_b = (_a = query.data) == null ? void 0 : _a.pages.flatMap((page) => page.data)) != null ? _b : []).filter((row) => {
6829
+ if (seen.has(row.userId)) return false;
6830
+ seen.add(row.userId);
6831
+ return true;
6832
+ });
6833
+ return __spreadProps(__spreadValues({}, query), {
6834
+ rows,
6835
+ hasNextPage: !!query.hasNextPage
6836
+ });
6837
+ }
6838
+
6760
6839
  // src/use-external-id.ts
6761
6840
  var import_react27 = require("react");
6762
6841
  function useExternalId(options = {}) {
@@ -6787,12 +6866,12 @@ function useExternalId(options = {}) {
6787
6866
  }
6788
6867
 
6789
6868
  // src/use-execution-positions.ts
6790
- var import_react_query30 = require("@tanstack/react-query");
6869
+ var import_react_query31 = require("@tanstack/react-query");
6791
6870
  function useExecutionPositions(options = {}) {
6792
6871
  var _a, _b;
6793
6872
  const client = useAggClient();
6794
6873
  const { limit = 50, status, mode, enabled = true } = options;
6795
- const query = (0, import_react_query30.useInfiniteQuery)({
6874
+ const query = (0, import_react_query31.useInfiniteQuery)({
6796
6875
  queryKey: executionKeys.positions(null, limit, status != null ? status : null, mode != null ? mode : null),
6797
6876
  queryFn: ({ pageParam }) => client.getExecutionPositions(__spreadProps(__spreadValues({
6798
6877
  limit,
@@ -6823,11 +6902,11 @@ var import_react30 = require("react");
6823
6902
  var import_sdk6 = require("@agg-build/sdk");
6824
6903
 
6825
6904
  // src/use-market-chart.ts
6826
- var import_react_query32 = require("@tanstack/react-query");
6905
+ var import_react_query33 = require("@tanstack/react-query");
6827
6906
 
6828
6907
  // src/read-retry.ts
6829
6908
  var import_sdk3 = require("@agg-build/sdk");
6830
- var import_react_query31 = require("@tanstack/react-query");
6909
+ var import_react_query32 = require("@tanstack/react-query");
6831
6910
  var MAX_TIMER_DELAY_MS = 2147483647;
6832
6911
  var hint = (error) => {
6833
6912
  if (!(0, import_sdk3.isAggApiError)(error)) return void 0;
@@ -6839,7 +6918,7 @@ function withReadRetry(options) {
6839
6918
  retry: (failureCount, error) => {
6840
6919
  var _a, _b;
6841
6920
  if (((_a = hint(error)) != null ? _a : 0) > MAX_TIMER_DELAY_MS) return false;
6842
- const retry = (_b = options.retry) != null ? _b : import_react_query31.isServer ? 0 : 3;
6921
+ const retry = (_b = options.retry) != null ? _b : import_react_query32.isServer ? 0 : 3;
6843
6922
  return typeof retry === "function" ? retry(failureCount, error) : retry === true || typeof retry === "number" && failureCount < retry;
6844
6923
  },
6845
6924
  retryDelay: (attempt, error) => {
@@ -7227,7 +7306,7 @@ function useMarketDataSubscription({
7227
7306
  function useMarketChartQueries(options) {
7228
7307
  var _a, _b;
7229
7308
  const client = useAggClient();
7230
- const queryClient = (0, import_react_query32.useQueryClient)();
7309
+ const queryClient = (0, import_react_query33.useQueryClient)();
7231
7310
  const socket = useAggWebSocket();
7232
7311
  const isConnected = useAggWebSocketConnectionState();
7233
7312
  const {
@@ -7270,7 +7349,7 @@ function useMarketChartQueries(options) {
7270
7349
  orderbook: true,
7271
7350
  trades: true
7272
7351
  });
7273
- const queries = (0, import_react_query32.useQueries)({
7352
+ const queries = (0, import_react_query33.useQueries)({
7274
7353
  queries: outcomeIds.map((outcomeId) => __spreadProps(__spreadValues({
7275
7354
  // Cache key is intentionally time-free. The rolling window's
7276
7355
  // startTs/endTs advance on every bucket but the user expects the same
@@ -7344,7 +7423,7 @@ function useMarketChartQueries(options) {
7344
7423
  },
7345
7424
  retryDelay: (_attempt, error) => error instanceof ChartDeliveryError && error.retryAfterMs != null ? Math.min(error.state === "warming" ? 1e3 : 5e3, Math.max(0, error.retryAfterMs)) : 1e3
7346
7425
  })), {
7347
- placeholderData: import_react_query32.keepPreviousData,
7426
+ placeholderData: import_react_query33.keepPreviousData,
7348
7427
  refetchInterval: (query) => chartRefetchInterval(
7349
7428
  query,
7350
7429
  refetchIntervalMs != null && refetchIntervalMs > 0 ? refetchIntervalMs : false
@@ -7671,7 +7750,7 @@ function useEventOrderbookData(venueMarkets, selectedMarketId) {
7671
7750
  }
7672
7751
 
7673
7752
  // src/use-market-orderbook.ts
7674
- var import_react_query33 = require("@tanstack/react-query");
7753
+ var import_react_query34 = require("@tanstack/react-query");
7675
7754
 
7676
7755
  // src/market-data/orderbook-snapshot.ts
7677
7756
  var orderbookTimestampSeconds = (timestamp) => timestamp >= 1e12 ? timestamp / 1e3 : timestamp;
@@ -7936,7 +8015,7 @@ function selectOrderbookSnapshots(client, store, ids, socketHealthy, signal) {
7936
8015
  // src/use-market-orderbook.ts
7937
8016
  function useMarketOrderbook(options) {
7938
8017
  var _a, _b, _c, _d, _e, _f, _g;
7939
- const queryClient = (0, import_react_query33.useQueryClient)();
8018
+ const queryClient = (0, import_react_query34.useQueryClient)();
7940
8019
  const client = useAggClient();
7941
8020
  const ws = useAggWebSocket();
7942
8021
  const isConnected = useAggWebSocketConnectionState();
@@ -7962,7 +8041,7 @@ function useMarketOrderbook(options) {
7962
8041
  var _a2;
7963
8042
  return ((_a2 = store.get(id).connectionGeneration) != null ? _a2 : 0) === 0;
7964
8043
  }));
7965
- const seedQuery = (0, import_react_query33.useQuery)({
8044
+ const seedQuery = (0, import_react_query34.useQuery)({
7966
8045
  queryKey: ["market-orderbook-seed", sortedIds],
7967
8046
  queryFn: createOrderbookSnapshotQuery(client, store, sortedIds, preferSocket),
7968
8047
  enabled: enabled && subscriptionIds.length > 0,
@@ -8402,7 +8481,7 @@ function useLiveTrades(canonicalMarketId) {
8402
8481
  }
8403
8482
 
8404
8483
  // src/use-midpoints.ts
8405
- var import_react_query34 = require("@tanstack/react-query");
8484
+ var import_react_query35 = require("@tanstack/react-query");
8406
8485
  var import_react35 = require("react");
8407
8486
  var normalizeVenueMarketIds = (venueMarkets) => {
8408
8487
  var _a;
@@ -8600,7 +8679,7 @@ function useMidpoints(venueMarkets, options) {
8600
8679
  () => (venueMarkets != null ? venueMarkets : []).map((market) => market.id).filter(Boolean),
8601
8680
  [venueMarkets]
8602
8681
  );
8603
- const { data, isLoading } = (0, import_react_query34.useQuery)({
8682
+ const { data, isLoading } = (0, import_react_query35.useQuery)({
8604
8683
  queryKey: ["midpoints", ids, maxMidpointIdsPerRequest],
8605
8684
  queryFn: () => client.getMidpoints(ids, { bestPrice: true, maxMidpointIdsPerRequest }),
8606
8685
  enabled: ids.length > 0,
@@ -8811,7 +8890,7 @@ function useArbFeed() {
8811
8890
  }
8812
8891
 
8813
8892
  // src/use-order-book.ts
8814
- var import_react_query35 = require("@tanstack/react-query");
8893
+ var import_react_query36 = require("@tanstack/react-query");
8815
8894
  var fetchBatchBookQuery = (client, venueMarketIds, { signal }) => client.getOrderbooks({ venueMarketIds }, { signal });
8816
8895
  var createBatchBookQuery = (client, venueMarketIds) => fetchBatchBookQuery.bind(null, client, venueMarketIds);
8817
8896
  function useOrderBook(options) {
@@ -8826,7 +8905,7 @@ function useOrderBook(options) {
8826
8905
  venueMarketOutcomeId: outcome.id
8827
8906
  })) : void 0
8828
8907
  });
8829
- const batchedResult = (0, import_react_query35.useQuery)({
8908
+ const batchedResult = (0, import_react_query36.useQuery)({
8830
8909
  queryKey: requestedVenueMarketIds.length ? ["orderbooks", requestedVenueMarketIds, null] : ["orderbooks", "__disabled__", null],
8831
8910
  queryFn: createBatchBookQuery(client, requestedVenueMarketIds),
8832
8911
  enabled: enabled && !canonicalMarketId && requestedVenueMarketIds.length > 0,
@@ -8834,7 +8913,7 @@ function useOrderBook(options) {
8834
8913
  gcTime: 5 * 6e4,
8835
8914
  refetchOnWindowFocus: false,
8836
8915
  retry: 1,
8837
- placeholderData: import_react_query35.keepPreviousData
8916
+ placeholderData: import_react_query36.keepPreviousData
8838
8917
  });
8839
8918
  const data = (() => {
8840
8919
  var _a, _b;
@@ -8889,7 +8968,7 @@ function useOrderBook(options) {
8889
8968
  }
8890
8969
 
8891
8970
  // src/use-orderbook-quote.ts
8892
- var import_react_query36 = require("@tanstack/react-query");
8971
+ var import_react_query37 = require("@tanstack/react-query");
8893
8972
  var QUOTE_DEBOUNCE_MS = 300;
8894
8973
  var createUnavailableOrderbookError = (message, code, retryable) => {
8895
8974
  const error = new Error(message);
@@ -8951,7 +9030,7 @@ function useOrderbookQuote(options) {
8951
9030
  const { marketId, side, size, enabled = true } = options;
8952
9031
  const debouncedSize = useDebouncedValue(size, QUOTE_DEBOUNCE_MS);
8953
9032
  const shouldFetch = enabled && !!marketId && debouncedSize > 0;
8954
- const query = (0, import_react_query36.useQuery)({
9033
+ const query = (0, import_react_query37.useQuery)({
8955
9034
  queryKey: marketId ? marketDataKeys.orderbookQuote(marketId, side, debouncedSize) : ["market-data", "orderbook-quote", "__disabled__"],
8956
9035
  queryFn: () => __async(null, null, function* () {
8957
9036
  var _a2, _b, _c, _d;
@@ -8982,7 +9061,7 @@ function useOrderbookQuote(options) {
8982
9061
  staleTime: 1e4,
8983
9062
  gcTime: 5 * 6e4,
8984
9063
  retry: 1,
8985
- placeholderData: import_react_query36.keepPreviousData
9064
+ placeholderData: import_react_query37.keepPreviousData
8986
9065
  });
8987
9066
  return {
8988
9067
  data: (_a = query.data) != null ? _a : null,
@@ -8993,12 +9072,12 @@ function useOrderbookQuote(options) {
8993
9072
  }
8994
9073
 
8995
9074
  // src/use-orders.ts
8996
- var import_react_query37 = require("@tanstack/react-query");
9075
+ var import_react_query38 = require("@tanstack/react-query");
8997
9076
  function useOrders(options = {}) {
8998
9077
  var _a, _b, _c, _d;
8999
9078
  const client = useAggClient();
9000
9079
  const { userId, status, limit = 50, offset = 0, enabled = true } = options;
9001
- const query = (0, import_react_query37.useQuery)({
9080
+ const query = (0, import_react_query38.useQuery)({
9002
9081
  queryKey: ["orders", userId != null ? userId : "me", status != null ? status : "all", limit, offset],
9003
9082
  queryFn: () => client.getOrders({
9004
9083
  userId,
@@ -9015,13 +9094,13 @@ function useOrders(options = {}) {
9015
9094
  }
9016
9095
 
9017
9096
  // src/use-search.ts
9018
- var import_react_query38 = require("@tanstack/react-query");
9097
+ var import_react_query39 = require("@tanstack/react-query");
9019
9098
  var import_react38 = require("react");
9020
9099
  function useSearch(options) {
9021
9100
  var _a, _b, _c, _d;
9022
9101
  const client = (0, import_react38.useContext)(AggClientContext);
9023
- const queryClient = (0, import_react38.useContext)(import_react_query38.QueryClientContext);
9024
- const [fallbackQueryClient] = (0, import_react38.useState)(() => new import_react_query38.QueryClient());
9102
+ const queryClient = (0, import_react38.useContext)(import_react_query39.QueryClientContext);
9103
+ const [fallbackQueryClient] = (0, import_react38.useState)(() => new import_react_query39.QueryClient());
9025
9104
  const {
9026
9105
  q,
9027
9106
  type,
@@ -9055,7 +9134,7 @@ function useSearch(options) {
9055
9134
  ];
9056
9135
  const effectiveQueryClient = queryClient != null ? queryClient : fallbackQueryClient;
9057
9136
  const retryOptions = withReadRetry(effectiveQueryClient.defaultQueryOptions({ queryKey }));
9058
- const query = (0, import_react_query38.useInfiniteQuery)(
9137
+ const query = (0, import_react_query39.useInfiniteQuery)(
9059
9138
  __spreadProps(__spreadValues({
9060
9139
  // deep is part of the key — TanStack treats deep vs light as
9061
9140
  // independent queries so users can have both modes cached side-by-side.
@@ -9085,7 +9164,7 @@ function useSearch(options) {
9085
9164
  if (!lastPage.hasMore) return void 0;
9086
9165
  return (_a2 = lastPage.nextCursor) != null ? _a2 : void 0;
9087
9166
  },
9088
- placeholderData: import_react_query38.keepPreviousData
9167
+ placeholderData: import_react_query39.keepPreviousData
9089
9168
  }, retryOptions), {
9090
9169
  enabled: isEnabled && !!client
9091
9170
  }),
@@ -9195,7 +9274,7 @@ function useMarketSearch(options) {
9195
9274
  }
9196
9275
 
9197
9276
  // src/use-smart-route.ts
9198
- var import_react_query39 = require("@tanstack/react-query");
9277
+ var import_react_query40 = require("@tanstack/react-query");
9199
9278
 
9200
9279
  // src/smart-route-refresh-policy.ts
9201
9280
  var THIN_SMART_ROUTE_REFETCH_INTERVAL_MS = 5e3;
@@ -9359,7 +9438,7 @@ function useSmartRoute(options) {
9359
9438
  const resolvedVenueMarketOutcomeId = (_a = venueMarketOutcomeId != null ? venueMarketOutcomeId : venueMarketId) != null ? _a : outcomeId;
9360
9439
  const hasValidInput = (maxSpend != null ? maxSpend : 0) > 0 || (sellShares != null ? sellShares : 0) > 0;
9361
9440
  const queryEnabled = enabled && !!resolvedVenueMarketOutcomeId && hasValidInput;
9362
- const query = (0, import_react_query39.useQuery)({
9441
+ const query = (0, import_react_query40.useQuery)({
9363
9442
  queryKey: [
9364
9443
  "smart-route",
9365
9444
  resolvedVenueMarketOutcomeId,
@@ -9422,7 +9501,7 @@ function useSmartRoute(options) {
9422
9501
  // a different amount or position snapshot. Never expose it under a new
9423
9502
  // sell key while the replacement request is in flight. BUY retains the
9424
9503
  // existing no-flicker behavior.
9425
- placeholderData: tradeSide === "sell" ? void 0 : import_react_query39.keepPreviousData
9504
+ placeholderData: tradeSide === "sell" ? void 0 : import_react_query40.keepPreviousData
9426
9505
  });
9427
9506
  const error = query.error;
9428
9507
  let loadingReason = null;
@@ -9444,7 +9523,7 @@ function useSmartRoute(options) {
9444
9523
  }
9445
9524
 
9446
9525
  // src/use-limit-order-venue-quotes.ts
9447
- var import_react_query40 = require("@tanstack/react-query");
9526
+ var import_react_query41 = require("@tanstack/react-query");
9448
9527
  var getIsDocumentVisible2 = () => {
9449
9528
  if (typeof document === "undefined") return true;
9450
9529
  return document.visibilityState !== "hidden";
@@ -9499,7 +9578,7 @@ var useLimitOrderVenueQuotes = (options) => {
9499
9578
  const hasRequiredAccount = tradeSide === "buy" || Boolean(accountId);
9500
9579
  const queryEnabled = enabled && hasValidInput && hasRequiredAccount;
9501
9580
  const serializedChainBalances = chainBalances ? JSON.stringify(chainBalances) : null;
9502
- const tickMetadataQuery = (0, import_react_query40.useQuery)({
9581
+ const tickMetadataQuery = (0, import_react_query41.useQuery)({
9503
9582
  queryKey: ["orderbooks", marketId != null ? marketId : "__disabled__", "limit-order-ticks"],
9504
9583
  queryFn: ({ signal }) => client.getOrderbooks({ venueMarketIds: [marketId] }, { signal }),
9505
9584
  enabled: enabled && Boolean(marketId),
@@ -9508,7 +9587,7 @@ var useLimitOrderVenueQuotes = (options) => {
9508
9587
  refetchOnWindowFocus: false,
9509
9588
  retry: 1
9510
9589
  });
9511
- const queries = (0, import_react_query40.useQueries)({
9590
+ const queries = (0, import_react_query41.useQueries)({
9512
9591
  queries: uniqueRequests.map((request) => ({
9513
9592
  queryKey: [
9514
9593
  "smart-route",
@@ -9540,7 +9619,7 @@ var useLimitOrderVenueQuotes = (options) => {
9540
9619
  );
9541
9620
  }),
9542
9621
  enabled: queryEnabled,
9543
- placeholderData: import_react_query40.keepPreviousData,
9622
+ placeholderData: import_react_query41.keepPreviousData,
9544
9623
  staleTime: staleTimeMs,
9545
9624
  refetchInterval: (queryState) => {
9546
9625
  var _a2, _b2, _c, _d;
@@ -9590,7 +9669,7 @@ var useLimitOrderVenueQuotes = (options) => {
9590
9669
  };
9591
9670
 
9592
9671
  // src/use-venue-sell-quotes.ts
9593
- var import_react_query41 = require("@tanstack/react-query");
9672
+ var import_react_query42 = require("@tanstack/react-query");
9594
9673
  var getIsDocumentVisible3 = () => {
9595
9674
  if (typeof document === "undefined") return true;
9596
9675
  return document.visibilityState !== "hidden";
@@ -9621,7 +9700,7 @@ var useVenueSellQuotes = (options) => {
9621
9700
  refreshContext
9622
9701
  } = options;
9623
9702
  const uniqueRequests = getUniqueVenueRequests2(requests);
9624
- const queries = (0, import_react_query41.useQueries)({
9703
+ const queries = (0, import_react_query42.useQueries)({
9625
9704
  queries: uniqueRequests.map((request) => {
9626
9705
  const hasValidInput = request.requestedSellShares > 0 && request.sellShares > 0 && request.availableShares > 0;
9627
9706
  const queryEnabled = enabled && !!venueMarketOutcomeId && !!accountId && hasValidInput;
@@ -9705,12 +9784,12 @@ var useVenueSellQuotes = (options) => {
9705
9784
  };
9706
9785
 
9707
9786
  // src/use-user-holdings.ts
9708
- var import_react_query42 = require("@tanstack/react-query");
9787
+ var import_react_query43 = require("@tanstack/react-query");
9709
9788
  function useUserHoldings(options) {
9710
9789
  var _a, _b;
9711
9790
  const client = useAggClient();
9712
9791
  const { venue, venueMarketId, venueEventId, enabled = true } = options;
9713
- const query = (0, import_react_query42.useInfiniteQuery)({
9792
+ const query = (0, import_react_query43.useInfiniteQuery)({
9714
9793
  queryKey: ["user-holdings", venue, venueMarketId, venueEventId],
9715
9794
  queryFn: (_0) => __async(null, [_0], function* ({ pageParam }) {
9716
9795
  return client.getUserHoldings({
@@ -9739,10 +9818,10 @@ function useUserHoldings(options) {
9739
9818
  var import_react41 = require("react");
9740
9819
 
9741
9820
  // src/use-venue-event.ts
9742
- var import_react_query44 = require("@tanstack/react-query");
9821
+ var import_react_query45 = require("@tanstack/react-query");
9743
9822
 
9744
9823
  // src/use-recurring-crypto-markets.ts
9745
- var import_react_query43 = require("@tanstack/react-query");
9824
+ var import_react_query44 = require("@tanstack/react-query");
9746
9825
  var RESOLVING_POLL_INTERVAL_MS = 15e3;
9747
9826
  var FALLBACK_VENUE_EVENT_PAGE_LIMIT = 100;
9748
9827
  var FALLBACK_VENUE_EVENT_MAX_PAGES = 5;
@@ -10242,7 +10321,7 @@ var useRecurringCryptoMarkets = ({
10242
10321
  const client = useAggClient();
10243
10322
  const identity = event ? resolveRecurringCryptoIdentity(event) : null;
10244
10323
  const isEnabled = enabled && event != null && identity != null;
10245
- const query = (0, import_react_query43.useQuery)({
10324
+ const query = (0, import_react_query44.useQuery)({
10246
10325
  queryKey: [
10247
10326
  "recurring-crypto-markets",
10248
10327
  event == null ? void 0 : event.id,
@@ -10304,7 +10383,7 @@ function useVenueEvent(options) {
10304
10383
  var _a;
10305
10384
  const client = useAggClient();
10306
10385
  const { eventId, enabled = true, cluster } = options;
10307
- const query = (0, import_react_query44.useQuery)({
10386
+ const query = (0, import_react_query45.useQuery)({
10308
10387
  queryKey: ["venue-event", eventId, cluster === false ? "no-cluster" : ""],
10309
10388
  queryFn: (_0) => __async(null, [_0], function* ({ signal }) {
10310
10389
  return client.getVenueEventById(eventId, { signal, cluster });
@@ -10324,13 +10403,13 @@ function useVenueEvent(options) {
10324
10403
  }
10325
10404
 
10326
10405
  // src/use-venue-markets.ts
10327
- var import_react_query45 = require("@tanstack/react-query");
10406
+ var import_react_query46 = require("@tanstack/react-query");
10328
10407
  var import_react40 = require("react");
10329
10408
  function useVenueMarkets(options) {
10330
10409
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
10331
10410
  const client = (0, import_react40.useContext)(AggClientContext);
10332
- const queryClient = (0, import_react40.useContext)(import_react_query45.QueryClientContext);
10333
- const [fallbackQueryClient] = (0, import_react40.useState)(() => new import_react_query45.QueryClient());
10411
+ const queryClient = (0, import_react40.useContext)(import_react_query46.QueryClientContext);
10412
+ const [fallbackQueryClient] = (0, import_react40.useState)(() => new import_react_query46.QueryClient());
10334
10413
  const venue = options == null ? void 0 : options.venue;
10335
10414
  const venueEventId = options == null ? void 0 : options.venueEventId;
10336
10415
  const cluster = options == null ? void 0 : options.cluster;
@@ -10357,7 +10436,7 @@ function useVenueMarkets(options) {
10357
10436
  if (enabled && !client) {
10358
10437
  throw new Error("useVenueMarkets must be used within an <AggProvider>");
10359
10438
  }
10360
- const query = (0, import_react_query45.useInfiniteQuery)(
10439
+ const query = (0, import_react_query46.useInfiniteQuery)(
10361
10440
  {
10362
10441
  queryKey: [
10363
10442
  "venue-markets",
@@ -10489,13 +10568,13 @@ function useEnrichedVenueEvent(options) {
10489
10568
  }
10490
10569
 
10491
10570
  // src/use-venue-events.ts
10492
- var import_react_query46 = require("@tanstack/react-query");
10571
+ var import_react_query47 = require("@tanstack/react-query");
10493
10572
  var import_react42 = require("react");
10494
10573
  function useVenueEvents(options) {
10495
10574
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
10496
10575
  const client = (0, import_react42.useContext)(AggClientContext);
10497
- const queryClient = (0, import_react42.useContext)(import_react_query46.QueryClientContext);
10498
- const [fallbackQueryClient] = (0, import_react42.useState)(() => new import_react_query46.QueryClient());
10576
+ const queryClient = (0, import_react42.useContext)(import_react_query47.QueryClientContext);
10577
+ const [fallbackQueryClient] = (0, import_react42.useState)(() => new import_react_query47.QueryClient());
10499
10578
  const venues = options == null ? void 0 : options.venues;
10500
10579
  const search = options == null ? void 0 : options.search;
10501
10580
  const categoryIds = options == null ? void 0 : options.categoryIds;
@@ -10522,7 +10601,7 @@ function useVenueEvents(options) {
10522
10601
  if (enabled && !client) {
10523
10602
  throw new Error("useVenueEvents must be used within an <AggProvider>");
10524
10603
  }
10525
- const query = (0, import_react_query46.useInfiniteQuery)(
10604
+ const query = (0, import_react_query47.useInfiniteQuery)(
10526
10605
  {
10527
10606
  queryKey: [
10528
10607
  queryKeyScope,
@@ -10570,7 +10649,7 @@ function useVenueEvents(options) {
10570
10649
  return (_a2 = lastPage.nextCursor) != null ? _a2 : void 0;
10571
10650
  },
10572
10651
  // TODO: RMIK - Comment out to show skeletons on category switch
10573
- placeholderData: import_react_query46.keepPreviousData,
10652
+ placeholderData: import_react_query47.keepPreviousData,
10574
10653
  enabled: enabled && !!client
10575
10654
  },
10576
10655
  queryClient != null ? queryClient : fallbackQueryClient
@@ -10618,7 +10697,7 @@ function useVenueEvents(options) {
10618
10697
  }
10619
10698
 
10620
10699
  // src/use-sports-live.ts
10621
- var import_react_query47 = require("@tanstack/react-query");
10700
+ var import_react_query48 = require("@tanstack/react-query");
10622
10701
  var SPORTS_LIVE_POLL_INTERVAL_MS = 5e3;
10623
10702
  var SPORTS_SCHEDULED_POLL_INTERVAL_MS = 3e4;
10624
10703
  var sportsLiveQueryKey = (sortedEventIds) => ["sports-live", ...sortedEventIds];
@@ -10638,7 +10717,7 @@ var useSportsLive = (eventIds, enabled = true) => {
10638
10717
  const sortedEventIds = [
10639
10718
  ...new Set(eventIds.map((eventId) => eventId.trim()).filter(Boolean))
10640
10719
  ].sort();
10641
- const query = (0, import_react_query47.useQuery)({
10720
+ const query = (0, import_react_query48.useQuery)({
10642
10721
  queryKey: sportsLiveQueryKey(sortedEventIds),
10643
10722
  queryFn: ({ signal }) => client.getSportsLive(sortedEventIds, { signal }),
10644
10723
  enabled: enabled && sortedEventIds.length > 0,
@@ -10658,7 +10737,7 @@ var useSportsLive = (eventIds, enabled = true) => {
10658
10737
  };
10659
10738
 
10660
10739
  // src/use-venue-market-midpoints.ts
10661
- var import_react_query48 = require("@tanstack/react-query");
10740
+ var import_react_query49 = require("@tanstack/react-query");
10662
10741
  var normalizeVenueMarketIds2 = (venueMarketIds) => {
10663
10742
  return [
10664
10743
  ...new Set(venueMarketIds.map((venueMarketId) => venueMarketId.trim()).filter(Boolean))
@@ -10697,7 +10776,7 @@ function useVenueMarketMidpoints(options) {
10697
10776
  const enabled = (_a = options.enabled) != null ? _a : true;
10698
10777
  const requestedVenueMarketIds = normalizeVenueMarketIds2(options.venueMarketIds);
10699
10778
  const maxMidpointIdsPerRequest = (_b = options.maxMidpointIdsPerRequest) != null ? _b : configuredMaxMidpointIdsPerRequest;
10700
- const query = (0, import_react_query48.useQuery)({
10779
+ const query = (0, import_react_query49.useQuery)({
10701
10780
  queryKey: requestedVenueMarketIds.length ? ["venue-market-midpoints", requestedVenueMarketIds, maxMidpointIdsPerRequest] : ["venue-market-midpoints", "__disabled__"],
10702
10781
  queryFn: (_0) => __async(null, [_0], function* ({ signal }) {
10703
10782
  if (requestedVenueMarketIds.length === 0) {
@@ -10713,7 +10792,7 @@ function useVenueMarketMidpoints(options) {
10713
10792
  gcTime: 5 * 6e4,
10714
10793
  refetchOnWindowFocus: false,
10715
10794
  retry: 1,
10716
- placeholderData: import_react_query48.keepPreviousData
10795
+ placeholderData: import_react_query49.keepPreviousData
10717
10796
  });
10718
10797
  const midpointRows = (_d = (_c = query.data) == null ? void 0 : _c.data) != null ? _d : [];
10719
10798
  const midpointsByVenueMarketId = mapMidpointsByVenueMarketId(midpointRows);
@@ -11008,11 +11087,11 @@ function usePaperOnboarding() {
11008
11087
  }
11009
11088
 
11010
11089
  // src/use-settlement-details-data.ts
11011
- var import_react_query49 = require("@tanstack/react-query");
11090
+ var import_react_query50 = require("@tanstack/react-query");
11012
11091
  function useSettlementDetailsData(options) {
11013
11092
  const client = useAggClient();
11014
11093
  const { eventId, market, enabled, needsEvent, needsMarket } = options;
11015
- const eventQuery = (0, import_react_query49.useQuery)({
11094
+ const eventQuery = (0, import_react_query50.useQuery)({
11016
11095
  queryKey: ["settlement-details", "event", client.appId, eventId],
11017
11096
  queryFn: ({ signal }) => client.getVenueEventById(eventId, { signal }),
11018
11097
  enabled: enabled && needsEvent,
@@ -11020,7 +11099,7 @@ function useSettlementDetailsData(options) {
11020
11099
  gcTime: 10 * 6e4,
11021
11100
  retry: false
11022
11101
  });
11023
- const marketQuery = (0, import_react_query49.useQuery)({
11102
+ const marketQuery = (0, import_react_query50.useQuery)({
11024
11103
  queryKey: ["settlement-details", "market", client.appId, market.id],
11025
11104
  queryFn: (_0) => __async(null, [_0], function* ({ signal }) {
11026
11105
  const response = yield client.getVenueMarkets(
@@ -11041,7 +11120,7 @@ function useSettlementDetailsData(options) {
11041
11120
 
11042
11121
  // src/use-hosted-venue-transfers.ts
11043
11122
  var import_react46 = require("react");
11044
- var import_react_query50 = require("@tanstack/react-query");
11123
+ var import_react_query51 = require("@tanstack/react-query");
11045
11124
  var validRequest = (value) => {
11046
11125
  var _a;
11047
11126
  const row = value;
@@ -11054,7 +11133,7 @@ function useHostedVenueTransfers(accountId, environment) {
11054
11133
  const client = useAggClient();
11055
11134
  const { user, isAuthenticated } = useAggAuthContext();
11056
11135
  const { executionMode, isResolving } = useResolvedExecutionMode();
11057
- const queryClient = (0, import_react_query50.useQueryClient)();
11136
+ const queryClient = (0, import_react_query51.useQueryClient)();
11058
11137
  const userId = (_a = user == null ? void 0 : user.id) != null ? _a : null;
11059
11138
  const permitted = isAuthenticated && !!userId && !isResolving && executionMode === "live";
11060
11139
  const scope = JSON.stringify([userId, accountId, environment]);
@@ -11093,7 +11172,7 @@ function useHostedVenueTransfers(accountId, environment) {
11093
11172
  });
11094
11173
  invalidateBalanceQueries(queryClient);
11095
11174
  };
11096
- const deposit = (0, import_react_query50.useMutation)({
11175
+ const deposit = (0, import_react_query51.useMutation)({
11097
11176
  mutationFn: () => __async(null, null, function* () {
11098
11177
  assertSession();
11099
11178
  const result2 = yield client.getHostedVenueDepositAddress("betdex", { mode: "live" });
@@ -11103,7 +11182,7 @@ function useHostedVenueTransfers(accountId, environment) {
11103
11182
  }),
11104
11183
  retry: false
11105
11184
  });
11106
- const withdrawal = (0, import_react_query50.useMutation)({
11185
+ const withdrawal = (0, import_react_query51.useMutation)({
11107
11186
  mutationFn: (request) => __async(null, null, function* () {
11108
11187
  assertSession();
11109
11188
  if (dispatching.current) throw new Error("Withdrawal request is already pending");
@@ -11122,7 +11201,7 @@ function useHostedVenueTransfers(accountId, environment) {
11122
11201
  }),
11123
11202
  retry: false
11124
11203
  });
11125
- const status = (0, import_react_query50.useQuery)({
11204
+ const status = (0, import_react_query51.useQuery)({
11126
11205
  queryKey: ["agg", "hosted-venue-withdrawal", scope, journal == null ? void 0 : journal.withdrawalId],
11127
11206
  queryFn: () => __async(null, null, function* () {
11128
11207
  assertSession();
@@ -11217,6 +11296,7 @@ function useHostedVenueTransfers(accountId, environment) {
11217
11296
  CONFIRMED_MATCH_STATUSES,
11218
11297
  DEFAULT_AGG_ROOT_CLASS_NAME,
11219
11298
  EventListStateProvider,
11299
+ LEADERBOARD_PERIODS,
11220
11300
  MAX_ORDER_VENUE_MARKET_IDS_PER_REQUEST,
11221
11301
  MAX_PRICE_GAP_PCT,
11222
11302
  MIN_PRICE_GAP_PCT,
@@ -11255,6 +11335,8 @@ function useHostedVenueTransfers(accountId, environment) {
11255
11335
  invalidateUserClaimState,
11256
11336
  invalidateUserMoneyState,
11257
11337
  isVenueDisabledByConfig,
11338
+ leaderboardQueryKeys,
11339
+ leaderboardRange,
11258
11340
  mergeBestPricesPreferringLive,
11259
11341
  mergeRecurringCryptoWindows,
11260
11342
  normalizeVenueId,
@@ -11315,6 +11397,7 @@ function useHostedVenueTransfers(accountId, environment) {
11315
11397
  useHostedVenueActivity,
11316
11398
  useHostedVenueTransfers,
11317
11399
  useLabels,
11400
+ useLeaderboard,
11318
11401
  useLimitOrderVenueQuotes,
11319
11402
  useLinkAccount,
11320
11403
  useLiveBestPriceCandidates,