syco.me Homelab Dashboard

This commit is contained in:
2026-05-10 21:23:42 +02:00
parent 933e492d15
commit 90de2c1674
45 changed files with 6666 additions and 0 deletions
+48
View File
@@ -0,0 +1,48 @@
import { Router } from 'express'
import axios from 'axios'
const router = Router()
router.get('/nodes', async (_req, res) => {
try {
const host = process.env.HEADSCALE_HOST
const key = process.env.HEADSCALE_API_KEY
if (!host || !key) {
res.status(503).json({ error: 'HEADSCALE_HOST / HEADSCALE_API_KEY not configured' })
return
}
const response = await axios.get(`${host}/api/v1/node`, {
headers: { Authorization: `Bearer ${key.trim()}` },
})
type HsNode = {
id: string
name: string
ipAddresses: string[]
online: boolean
lastSeen: string
user?: { name: string }
}
const nodes: HsNode[] = response.data?.nodes ?? []
res.json({
total: nodes.length,
online: nodes.filter(n => n.online).length,
nodes: nodes.map(n => ({
id: n.id,
name: n.name,
ip: n.ipAddresses?.[0] ?? '',
online: n.online,
lastSeen: n.lastSeen,
user: n.user?.name ?? '',
})),
})
} catch (err: unknown) {
const msg = err instanceof Error ? err.message : 'Unknown error'
res.status(500).json({ error: msg })
}
})
export default router