import { ArrayOfCoin, Positions, VaultUtilizationResponse, } from 'types/generated/mars-credit-manager/MarsCreditManager.types' import { ArrayOfActiveEmission } from 'types/generated/mars-incentives/MarsIncentives.types' import { PriceResponse } from 'types/generated/mars-oracle-osmosis/MarsOracleOsmosis.types' import { AssetParamsBaseForAddr, TotalDepositResponse, VaultConfigBaseForAddr, } from 'types/generated/mars-params/MarsParams.types' import { ArrayOfMarket, ArrayOfUserCollateralResponse, ArrayOfUserDebtResponse, UserCollateralResponse, } from 'types/generated/mars-red-bank/MarsRedBank.types' interface Cache extends Map {} let totalRequests: number = 0 let cachedRequests: number = 0 export async function cacheFn( fn: () => Promise, cache: Cache, key: string, staleAfter: number = 5, ) { const cachedData = cache.get(key)?.data const isStale = (cache.get(key)?.timestamp || 0) + 1000 * staleAfter < new Date().getTime() totalRequests += 1 if (cachedData && !isStale) { cachedRequests += 1 return cachedData } const data = await fn() cache.set(key, { data, timestamp: new Date().getTime() }) return data } export const positionsCache: Cache = new Map() export const aprsCacheResponse: Cache = new Map() export const aprsCache: Cache = new Map() export const vaultConfigsCache: Cache = new Map() export const vaultUtilizationCache: Cache = new Map() export const unlockPositionsCache: Cache = new Map() export const estimateWithdrawCache: Cache = new Map() export const previewRedeemCache: Cache = new Map() export const priceCache: Cache = new Map() export const pythPriceCache: Cache = new Map() export const oraclePriceCache: Cache = new Map() export const poolPriceCache: Cache = new Map() export const emissionsCache: Cache = new Map() export const marketCache: Cache = new Map() export const marketsCache: Cache = new Map() export const underlyingLiquidityAmountCache: Cache = new Map() export const unclaimedRewardsCache: Cache = new Map() export const totalDepositCache: Cache = new Map() export const allParamsCache: Cache = new Map() export const underlyingDebtCache: Cache = new Map() export const previewDepositCache: Cache<{ vaultAddress: string; amount: string }> = new Map() export const stakingAprCache: Cache = new Map() export const assetParamsCache: Cache = new Map() export const userCollateralCache: Cache = new Map() export const userDebtCache: Cache = new Map()