@@ -10,9 +10,43 @@ export default function usePerpsMarketStates() {
1010 const clients = useClients ( )
1111 const perpsParams = useAllPerpsParams ( )
1212
13+ const swrKey = clients && perpsParams && `chains/${ chainConfig . id } /perps/market-states`
14+
1315 return useSWR (
14- clients && perpsParams && `chains/${ chainConfig . id } /perps/market-states` ,
15- ( ) => iteratePaginationQuery < MarketResponse > ( clients ! . perps . markets ) ,
16+ swrKey ,
17+ async ( ) => {
18+ try {
19+ const result = await iteratePaginationQuery < MarketResponse > ( clients ! . perps . markets )
20+ return result
21+ } catch ( error ) {
22+ console . error ( 'Market states fetch failed:' , error )
23+
24+ if (
25+ error instanceof Error &&
26+ ( error . message . includes ( 'Slinky Market' ) ||
27+ error . message . includes ( 'price is older than' ) ||
28+ error . message . includes ( 'Invalid price' ) )
29+ ) {
30+ const problematicDenoms = [ 'perps/ufxs' , 'perps/uom' , 'perps/unil' ]
31+ const enabledDenoms =
32+ perpsParams
33+ ?. map ( ( param ) => param . denom )
34+ . filter ( ( denom ) => ! problematicDenoms . includes ( denom ) ) || [ ]
35+ const individualResults : MarketResponse [ ] = [ ]
36+ for ( const denom of enabledDenoms ) {
37+ try {
38+ const marketState = await clients . perps . market ( { denom } )
39+ individualResults . push ( marketState )
40+ } catch ( individualError ) {
41+ console . warn ( `Failed to fetch market state for ${ denom } :` , individualError )
42+ }
43+ }
44+ return individualResults
45+ }
46+
47+ throw error
48+ }
49+ } ,
1650 {
1751 revalidateOnFocus : true ,
1852 refreshInterval : 10_000 ,
0 commit comments