From 74813ef656ab0f14b0b5a7595ca0ee86c851a269 Mon Sep 17 00:00:00 2001 From: chefmomota Date: Thu, 24 Oct 2024 16:57:17 +0800 Subject: [PATCH] feat: Add cache --- packages/farms/src/fetchUniversalFarms.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/farms/src/fetchUniversalFarms.ts b/packages/farms/src/fetchUniversalFarms.ts index bf1f84826d216..5a0e206182599 100644 --- a/packages/farms/src/fetchUniversalFarms.ts +++ b/packages/farms/src/fetchUniversalFarms.ts @@ -3,14 +3,25 @@ import { ERC20Token } from '@pancakeswap/sdk' import { FARMS_API } from '../config/endpoint' import { Protocol, UniversalFarmConfig } from './types' +const farmCache: Record = {} + export const fetchUniversalFarms = async (chainId: ChainId, protocol?: Protocol) => { + const cacheKey = `${chainId}-${protocol || 'all'}` + + // Return cached data if it exists + if (farmCache[cacheKey]) { + return farmCache[cacheKey] + } + try { const params = { chainId, ...(protocol && { protocol }) } const queryString = Object.entries(params) .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`) .join('&') - const response = await fetch(`${FARMS_API}?${queryString}`) + const response = await fetch(`${FARMS_API}?${queryString}`, { + signal: AbortSignal.timeout(3000), + }) const result = await response.json() const newData: UniversalFarmConfig[] = result.map((p: any) => ({ ...p, @@ -32,6 +43,9 @@ export const fetchUniversalFarms = async (chainId: ChainId, protocol?: Protocol) ), })) + // Cache the result before returning it + farmCache[cacheKey] = newData + return newData } catch (error) { return []