From d8cb603256cb2e08200d72d9bad98da531b6be40 Mon Sep 17 00:00:00 2001 From: antoncoding Date: Thu, 29 Jan 2026 12:31:09 +0800 Subject: [PATCH 1/2] feat: use everLiquidated from monarch API --- src/hooks/queries/useMarketMetricsQuery.ts | 25 ++++++++----------- .../queries/useMonarchLiquidationsQuery.ts | 25 +------------------ 2 files changed, 11 insertions(+), 39 deletions(-) diff --git a/src/hooks/queries/useMarketMetricsQuery.ts b/src/hooks/queries/useMarketMetricsQuery.ts index 93a7e20e..2397d071 100644 --- a/src/hooks/queries/useMarketMetricsQuery.ts +++ b/src/hooks/queries/useMarketMetricsQuery.ts @@ -1,8 +1,6 @@ import { useMemo } from 'react'; import { useQuery } from '@tanstack/react-query'; import { useMarketPreferences, type TrendingConfig, type FlowTimeWindow } from '@/stores/useMarketPreferences'; -import { useLiquidationsQuery } from '@/hooks/queries/useLiquidationsQuery'; -import { useMonarchLiquidatedKeys } from '@/hooks/queries/useMonarchLiquidationsQuery'; // Re-export types for convenience export type { FlowTimeWindow } from '@/stores/useMarketPreferences'; @@ -82,6 +80,8 @@ const fetchMarketMetricsPage = async (params: MarketMetricsParams, limit: number const response = await fetch(`/api/monarch/metrics?${searchParams.toString()}`); + console.log('response', response) + if (!response.ok) { throw new Error('Failed to fetch market metrics'); } @@ -178,6 +178,8 @@ export const useMarketMetricsMap = (params: MarketMetricsParams = {}) => { map.set(key, market); } console.log('[Metrics] Loaded', map.size, 'of', data.total, 'markets'); + + console.log('map', map.get('8453-0x9103c3b4e834476c9a62ea009ba2c884ee42e94e6e314a26f04d312434191836')) return map; }, [data?.markets, data?.total]); @@ -267,8 +269,6 @@ export const useTrendingMarketKeys = () => { }, [metricsMap, trendingConfig]); }; -const LIQUIDATIONS_STALE_THRESHOLD_MS = (2 * 60 + 5) * 60 * 1000; - /** * Returns whether a market has ever been liquidated. * Primary: Uses Monarch API /v1/liquidations endpoint @@ -278,17 +278,12 @@ const LIQUIDATIONS_STALE_THRESHOLD_MS = (2 * 60 + 5) * 60 * 1000; * once Monarch API stability is confirmed. */ export const useEverLiquidated = (chainId: number, uniqueKey: string): boolean => { - const { liquidatedKeys, lastUpdatedAt, isLoading } = useMonarchLiquidatedKeys(); - const isStale = lastUpdatedAt * 1000 < Date.now() - LIQUIDATIONS_STALE_THRESHOLD_MS; - const needsFallback = !isLoading && (isStale || liquidatedKeys.size === 0); - - const { data: fallbackKeys } = useLiquidationsQuery({ enabled: needsFallback }); - + const { metricsMap } = useMarketMetricsMap(); + + return useMemo(() => { const key = `${chainId}-${uniqueKey.toLowerCase()}`; - if (!needsFallback) { - return liquidatedKeys.has(key); - } - return fallbackKeys?.has(uniqueKey.toLowerCase()) ?? false; - }, [liquidatedKeys, needsFallback, chainId, uniqueKey, fallbackKeys]); + const metrics = metricsMap.get(key); + return metrics?.everLiquidated ?? false; + }, [metricsMap, chainId, uniqueKey]); }; diff --git a/src/hooks/queries/useMonarchLiquidationsQuery.ts b/src/hooks/queries/useMonarchLiquidationsQuery.ts index 0bdd9850..27091439 100644 --- a/src/hooks/queries/useMonarchLiquidationsQuery.ts +++ b/src/hooks/queries/useMonarchLiquidationsQuery.ts @@ -1,4 +1,4 @@ -import { useMemo } from 'react'; + import { useQuery } from '@tanstack/react-query'; /** @@ -27,26 +27,3 @@ export const useMonarchLiquidationsQuery = () => { refetchOnWindowFocus: false, }); }; - -/** - * Returns a Set of liquidated market keys for O(1) lookup. - * Key format: `${chainId}-${marketUniqueKey.toLowerCase()}` - * - * Also returns `lastUpdatedAt` to determine if data is stale. - */ -export const useMonarchLiquidatedKeys = () => { - const { data, ...rest } = useMonarchLiquidationsQuery(); - - const liquidatedKeys = useMemo(() => { - const keys = new Set(); - if (!data?.markets) return keys; - for (const m of data.markets) { - keys.add(`${m.chainId}-${m.marketUniqueKey.toLowerCase()}`); - } - return keys; - }, [data?.markets]); - - const lastUpdatedAt = data?.lastUpdatedAt ?? 0; - - return { liquidatedKeys, lastUpdatedAt, ...rest }; -}; From 3ff1058cef031002a10a53437c0b3e6ddb539a63 Mon Sep 17 00:00:00 2001 From: antoncoding Date: Thu, 29 Jan 2026 12:36:46 +0800 Subject: [PATCH 2/2] chore: cleanup --- src/hooks/queries/useMarketMetricsQuery.ts | 3 --- src/hooks/useMarketCampaigns.ts | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/hooks/queries/useMarketMetricsQuery.ts b/src/hooks/queries/useMarketMetricsQuery.ts index 2397d071..47fd324f 100644 --- a/src/hooks/queries/useMarketMetricsQuery.ts +++ b/src/hooks/queries/useMarketMetricsQuery.ts @@ -80,8 +80,6 @@ const fetchMarketMetricsPage = async (params: MarketMetricsParams, limit: number const response = await fetch(`/api/monarch/metrics?${searchParams.toString()}`); - console.log('response', response) - if (!response.ok) { throw new Error('Failed to fetch market metrics'); } @@ -179,7 +177,6 @@ export const useMarketMetricsMap = (params: MarketMetricsParams = {}) => { } console.log('[Metrics] Loaded', map.size, 'of', data.total, 'markets'); - console.log('map', map.get('8453-0x9103c3b4e834476c9a62ea009ba2c884ee42e94e6e314a26f04d312434191836')) return map; }, [data?.markets, data?.total]); diff --git a/src/hooks/useMarketCampaigns.ts b/src/hooks/useMarketCampaigns.ts index 616e96f6..8869629a 100644 --- a/src/hooks/useMarketCampaigns.ts +++ b/src/hooks/useMarketCampaigns.ts @@ -62,7 +62,7 @@ export function useMarketCampaigns(options: MarketCampaignsOptions): UseMarketCa return true; }); - console.log(`[useMarketCampaigns] Active Campaigns for market ${normalizedMarketId.slice(0, 6)}`, allMarketCampaigns); + console.debug(`[useMarketCampaigns] Active Campaigns for market ${normalizedMarketId.slice(0, 6)}`, allMarketCampaigns); const activeCampaigns = allMarketCampaigns.filter((campaign) => campaign.isActive);