72 lines
2.9 KiB
TypeScript
72 lines
2.9 KiB
TypeScript
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<T> extends Map<string, { data: T | null; timestamp: number }> {}
|
|
|
|
let totalRequests: number = 0
|
|
let cachedRequests: number = 0
|
|
|
|
export async function cacheFn<T>(
|
|
fn: () => Promise<T>,
|
|
cache: Cache<T>,
|
|
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<Positions> = new Map()
|
|
export const aprsCacheResponse: Cache<Response> = new Map()
|
|
export const aprsCache: Cache<AprResponse> = new Map()
|
|
export const vaultConfigsCache: Cache<VaultConfigBaseForAddr[]> = new Map()
|
|
export const vaultUtilizationCache: Cache<VaultUtilizationResponse> = new Map()
|
|
export const unlockPositionsCache: Cache<VaultExtensionResponse> = new Map()
|
|
export const estimateWithdrawCache: Cache<Coin[]> = new Map()
|
|
export const previewRedeemCache: Cache<string> = new Map()
|
|
export const priceCache: Cache<BigNumber> = new Map()
|
|
export const pythPriceCache: Cache<PythConfidenceData> = new Map()
|
|
export const oraclePriceCache: Cache<PriceResponse[]> = new Map()
|
|
export const poolPriceCache: Cache<PriceResponse[]> = new Map()
|
|
export const emissionsCache: Cache<ArrayOfActiveEmission> = new Map()
|
|
export const marketCache: Cache<Market> = new Map()
|
|
export const marketsCache: Cache<ArrayOfMarket> = new Map()
|
|
export const underlyingLiquidityAmountCache: Cache<string> = new Map()
|
|
export const unclaimedRewardsCache: Cache<ArrayOfCoin> = new Map()
|
|
export const totalDepositCache: Cache<TotalDepositResponse> = new Map()
|
|
export const allParamsCache: Cache<AssetParamsBaseForAddr[]> = new Map()
|
|
export const underlyingDebtCache: Cache<string> = new Map()
|
|
export const previewDepositCache: Cache<{ vaultAddress: string; amount: string }> = new Map()
|
|
export const stakingAprCache: Cache<StakingApr[]> = new Map()
|
|
export const assetParamsCache: Cache<AssetParamsBaseForAddr[]> = new Map()
|
|
export const userCollateralCache: Cache<ArrayOfUserCollateralResponse> = new Map()
|
|
export const userDebtCache: Cache<ArrayOfUserDebtResponse> = new Map()
|