diff --git a/src/components/services/widget.jsx b/src/components/services/widget.jsx index 926f1156f..ca313588c 100644 --- a/src/components/services/widget.jsx +++ b/src/components/services/widget.jsx @@ -11,6 +11,7 @@ import Jellyfin from "./widgets/service/jellyfin"; import Speedtest from "./widgets/service/speedtest"; import Traefik from "./widgets/service/traefik"; import Jellyseerr from "./widgets/service/jellyseerr"; +import Npm from "./widgets/service/npm"; const widgetMappings = { docker: Docker, @@ -25,7 +26,8 @@ const widgetMappings = { rutorrent: Rutorrent, speedtest: Speedtest, traefik: Traefik, - jellyseerr: Jellyseerr + jellyseerr: Jellyseerr, + npm: Npm, }; export default function Widget({ service }) { diff --git a/src/components/services/widgets/service/npm.jsx b/src/components/services/widgets/service/npm.jsx new file mode 100644 index 000000000..921cd69b9 --- /dev/null +++ b/src/components/services/widgets/service/npm.jsx @@ -0,0 +1,79 @@ +import useSWR from "swr"; + +import Widget from "../widget"; +import Block from "../block"; +import { useState } from "react"; + +export default function Npm({ service }) { + const config = service.widget; + const { url } = config; + + const [token, setToken] = useState(); + + const fetcher = async (reqUrl) => { + const { url, email, password } = config; + const urlConstructed = `${url}/api/tokens`; + const body = { identity: email, secret: password }; + + if (!token) { + const res = await fetch(urlConstructed, { + method: "POST", + body: JSON.stringify(body), + headers: { + "Content-Type": "application/json", + }, + }) + .then((response) => response.json()) + .then( + async (data) => + await fetch(reqUrl, { + method: "GET", + headers: { + "Content-Type": "application/json", + Authorization: "Bearer " + data.token, + }, + }) + ); + return res.json(); + } else { + const resp = await fetch(reqUrl, { + method: "GET", + headers: { + "Content-Type": "application/json", + Authorization: "Bearer " + token, + }, + }); + return resp.json(); + } + }; + + const { data: infoData, error: infoError } = useSWR(`${url}/api/nginx/proxy-hosts`, fetcher); + + console.log(infoData); + + if (infoError) { + return ; + } + + if (!infoData) { + return ( + + + + + + ); + } + + const enabled = infoData.filter((c) => c.enabled === 1).length; + const disabled = infoData.filter((c) => c.enabled === 0).length; + const total = infoData.length; + + return ( + + + + + + ); +}