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..222bf1bdf
--- /dev/null
+++ b/src/components/services/widgets/service/npm.jsx
@@ -0,0 +1,65 @@
+import useSWR from "swr";
+
+import Widget from "../widget";
+import Block from "../block";
+
+export default function Npm({ service }) {
+ const config = service.widget;
+ const { url } = config;
+
+ const fetcher = async (reqUrl) => {
+ const { url, username, password } = config;
+ const loginUrl = `${url}/api/tokens`;
+ const body = { identity: username, secret: password };
+
+ const res = await fetch(loginUrl, {
+ 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();
+ };
+
+ 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 (
+
+
+
+
+
+ );
+}
diff --git a/src/skeleton/services.yaml b/src/skeleton/services.yaml
index d6a010ab4..028b5e3ad 100644
--- a/src/skeleton/services.yaml
+++ b/src/skeleton/services.yaml
@@ -5,6 +5,11 @@
- My First Service:
href: http://localhost/
description: Homepage is awesome
+ widget:
+ type: npm # npm for NGINX Proxy Manager
+ url: http://localhost:81 # no slash at the end
+ username: aidenpwnz@proton.me # your email
+ password: AidenProxy1994! # your password
- My Second Group:
- My Second Service: