You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

36 lines
1.1 KiB

const axios = require('./axios.js')
const { get } = require('micro-fork')
const liveFns = require('./live-fns/_index.js')
const serveBadge = require('./serve-badge.js')
const liveFetcher = require('./live-fetcher.js')
const { API_HOST } = process.env
const apiFetcher = async url => {
return axios.get(API_HOST + url).then(
res => res.data,
err => {
console.error('API_ERR', url, err.message)
return (err.response && err.response.data) || { failed: true }
}
)
}
module.exports = Object.entries(liveFns).map(([name, fn]) => {
return get(`/${name}/*`, async (req, res) => {
const {
subject = name,
status = 'unknown',
color = 'grey',
failed = false
} = await (
API_HOST ? apiFetcher(req.url) : liveFetcher(name, fn, req.params['*'])
)
const style = req.headers.host === 'flat.badgen.net' ? 'flat' : undefined
req.params = { subject, status, color, style }
serveBadge(req, res, {
code: 200, // always 200 for badges
sMaxAge: failed ? '0' : (Math.random() * 60 + 60).toFixed()
})
})
})