import { jsonArrayFilter } from "utils/proxy/api-helpers"; import credentialedProxyHandler from "utils/proxy/handlers/credentialed"; import genericProxyHandler from "utils/proxy/handlers/generic"; import getServiceWidget from "utils/config/service-helpers"; const widget = { api: "{url}/api/v2.0/{endpoint}", proxyHandler: async (req, res, map) => { // choose proxy handler based on widget settings const { group, service } = req.query; if (group && service) { const widgetOpts = await getServiceWidget(group, service); let handler; if (widgetOpts.username && widgetOpts.password) { handler = genericProxyHandler; } else if (widgetOpts.key) { handler = credentialedProxyHandler; } if (handler) { return handler(req, res, map); } return res.status(500).json({ error: "Username / password or API key required" }); } return res.status(500).json({ error: "Error parsing widget request" }); }, mappings: { alerts: { endpoint: "alert/list", map: (data) => ({ pending: jsonArrayFilter(data, (item) => item?.dismissed === false).length, }), }, status: { endpoint: "system/info", validate: ["loadavg", "uptime_seconds"], }, }, }; export default widget;