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 (
+
+
+
+
+
+ );
+}