From 921375c53d5ce089d98778831d55f25c3189e06f Mon Sep 17 00:00:00 2001 From: Archben Date: Tue, 10 Mar 2026 08:56:20 +0000 Subject: [PATCH] Updates --- src/components/general/ttyd-iframe.tsx | 113 ++++++++++++++++++ .../(partials)/cluster-server-views.tsx | 95 +++++++++++++-- .../pages/admin/default-admin-props.ts | 5 + src/functions/ttyd/grab-ttyd-service-info.ts | 72 +++++++++++ src/hooks/use-app-init.ts | 30 ++++- src/layouts/admin/index.tsx | 13 +- src/pages/_app.tsx | 13 ++ src/server/index.ts | 2 +- src/styles/globals.css | 4 + src/types/index.ts | 45 ++++++- src/utils/grab-ttyd-cmd.ts | 13 +- ...rab-connected-websocket-user-data-index.ts | 17 +++ .../grab-connected-websocket-user-data.ts | 21 ++++ src/websocket/(utils)/kill-all-ttyd-ports.ts | 20 ++++ src/websocket/(utils)/kill-port.ts | 14 +++ src/websocket/events/client-kill-port.ts | 26 ++++ src/websocket/events/client-ping.ts | 8 +- .../events/client-service-server-logs.ts | 32 +++++ src/websocket/index.ts | 16 ++- src/websocket/socket-close.ts | 33 +++++ src/websocket/socket-message.ts | 30 +++-- src/websocket/socket-open.ts | 22 ++++ 22 files changed, 614 insertions(+), 30 deletions(-) create mode 100644 src/components/general/ttyd-iframe.tsx create mode 100644 src/functions/ttyd/grab-ttyd-service-info.ts create mode 100644 src/websocket/(utils)/grab-connected-websocket-user-data-index.ts create mode 100644 src/websocket/(utils)/grab-connected-websocket-user-data.ts create mode 100644 src/websocket/(utils)/kill-all-ttyd-ports.ts create mode 100644 src/websocket/(utils)/kill-port.ts create mode 100644 src/websocket/events/client-kill-port.ts create mode 100644 src/websocket/events/client-service-server-logs.ts create mode 100644 src/websocket/socket-close.ts create mode 100644 src/websocket/socket-open.ts diff --git a/src/components/general/ttyd-iframe.tsx b/src/components/general/ttyd-iframe.tsx new file mode 100644 index 0000000..801b01c --- /dev/null +++ b/src/components/general/ttyd-iframe.tsx @@ -0,0 +1,113 @@ +import Border from "@/twui/components/elements/Border"; +import Loading from "@/twui/components/elements/Loading"; +import LucideIcon from "@/twui/components/elements/lucide-icon"; +import useStatus from "@/twui/components/hooks/useStatus"; +import Button from "@/twui/components/layout/Button"; +import Center from "@/twui/components/layout/Center"; +import Row from "@/twui/components/layout/Row"; +import Span from "@/twui/components/layout/Span"; +import Stack from "@/twui/components/layout/Stack"; +import { + ComponentProps, + DetailedHTMLProps, + Fragment, + IframeHTMLAttributes, + ReactNode, +} from "react"; +import { twMerge } from "tailwind-merge"; + +type Props = Omit< + DetailedHTMLProps< + IframeHTMLAttributes, + HTMLIFrameElement + >, + "title" +> & { + url: string; + wrapperProps?: ComponentProps; + title?: string | ReactNode; +}; + +export default function TtydIframe({ + url, + wrapperProps, + title, + ...props +}: Props) { + const { loading, setLoading } = useStatus(); + + return ( + + + + + {title ? ( + + + {title} + + + + ) : null} + + + + {url} + + + + + + + + +
+ {loading ? ( +
+ +
+ ) : ( +