heynote/electron/preload/currency.ts

38 lines
1.2 KiB
TypeScript

import CONFIG from "../config"
const STALE_TIME = 1000 * 3600 * 12
export default async function getCurrencyData() {
const currency = CONFIG.get("currency")
if (currency?.timeFetched && (new Date()).getTime() - currency.timeFetched < STALE_TIME) {
// we already have currency data and it's not stale
return currency.data
} else {
// we either don't have currency data, or it's stale
let response
try {
response = await fetch("https://currencies.heynote.com/rates.json", {cache: "no-cache"})
} catch(err) {
// if we got an error, but have stale currency data, we'll use that
if (currency?.data) {
return currency.data
}
}
if (response.ok) {
const data = JSON.parse(await response.text())
CONFIG.set("currency", {
data,
timeFetched: (new Date()).getTime(),
})
return data
} else {
// if we got an error, but have stale currency data, we'll use that
console.log("Error retrieving currency data:", response)
if (currency?.data) {
return currency.data
}
}
}
}