mango-v4-ui/apis/coingecko.ts

67 lines
1.9 KiB
TypeScript
Raw Normal View History

2023-02-23 09:28:09 -08:00
type CoingeckoOhlcv = [
time: number,
open: number,
high: number,
low: number,
close: number
][]
export type ChartDataItem = {
time: number
price: number
inputTokenPrice: number
outputTokenPrice: number
}
2022-10-07 16:39:06 -07:00
export const fetchChartData = async (
2022-11-18 11:11:06 -08:00
baseTokenId: string | undefined,
quoteTokenId: string | undefined,
2022-11-29 21:30:18 -08:00
daysToShow: string
2023-02-23 09:28:09 -08:00
): Promise<ChartDataItem[]> => {
if (!baseTokenId || !quoteTokenId) return []
2022-11-04 05:39:10 -07:00
try {
const [inputResponse, outputResponse] = await Promise.all([
fetch(
`https://api.coingecko.com/api/v3/coins/${baseTokenId}/ohlc?vs_currency=usd&days=${daysToShow}`
),
fetch(
`https://api.coingecko.com/api/v3/coins/${quoteTokenId}/ohlc?vs_currency=usd&days=${daysToShow}`
),
])
2022-10-07 16:39:06 -07:00
2023-02-23 09:28:09 -08:00
const [inputTokenData, outputTokenData]: [CoingeckoOhlcv, CoingeckoOhlcv] =
await Promise.all([inputResponse.json(), outputResponse.json()])
2022-10-07 16:39:06 -07:00
2023-02-23 09:28:09 -08:00
if (Array.isArray(inputTokenData) && Array.isArray(outputTokenData)) {
const parsedData: ChartDataItem[] = []
for (const inputTokenCandle of inputTokenData) {
const outputTokenCandle = outputTokenData.find(
(outputTokenCandle) => outputTokenCandle[0] === inputTokenCandle[0]
)
if (outputTokenCandle) {
if (['usd-coin', 'tether'].includes(quoteTokenId)) {
parsedData.push({
time: inputTokenCandle[0],
price: inputTokenCandle[4] / outputTokenCandle[4],
inputTokenPrice: inputTokenCandle[4],
outputTokenPrice: outputTokenCandle[4],
})
} else {
parsedData.push({
time: inputTokenCandle[0],
price: outputTokenCandle[4] / inputTokenCandle[4],
inputTokenPrice: inputTokenCandle[4],
outputTokenPrice: outputTokenCandle[4],
})
}
2022-11-04 05:39:10 -07:00
}
2022-10-07 16:39:06 -07:00
}
2023-02-23 09:28:09 -08:00
return parsedData
} else {
return []
}
2022-11-04 05:39:10 -07:00
} catch {
return []
}
2022-10-07 16:39:06 -07:00
}