mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-07-15 04:43:36 +00:00
308 lines
5.9 KiB
TypeScript
308 lines
5.9 KiB
TypeScript
export type Host = {
|
|
id: string;
|
|
name: string;
|
|
username: string;
|
|
ip: string;
|
|
port: number;
|
|
folder: string;
|
|
online: boolean;
|
|
cpu: number | null;
|
|
ram: number | null;
|
|
lastAccess: string;
|
|
tags?: string[];
|
|
authType: "password" | "key" | "credential" | "none" | "opkssh";
|
|
credentialId?: string;
|
|
password?: string;
|
|
key?: string;
|
|
keyPassword?: string;
|
|
keyType?: string;
|
|
notes?: string;
|
|
macAddress?: string;
|
|
pin?: boolean;
|
|
|
|
enableTerminal: boolean;
|
|
terminalConfig?: {
|
|
cursorBlink: boolean;
|
|
cursorStyle: "block" | "underline" | "bar";
|
|
fontSize: number;
|
|
fontFamily: string;
|
|
letterSpacing: number;
|
|
lineHeight: number;
|
|
theme: string;
|
|
scrollback: number;
|
|
bellStyle: "none" | "sound" | "visual" | "both";
|
|
rightClickSelectsWord: boolean;
|
|
fastScrollModifier: "alt" | "ctrl" | "shift";
|
|
fastScrollSensitivity: number;
|
|
minimumContrastRatio: number;
|
|
backspaceMode: "normal" | "control-h";
|
|
agentForwarding: boolean;
|
|
autoMosh: boolean;
|
|
moshCommand: string;
|
|
autoTmux: boolean;
|
|
sudoPasswordAutoFill: boolean;
|
|
sudoPassword?: string;
|
|
keepaliveInterval?: number;
|
|
keepaliveCountMax?: number;
|
|
environmentVariables: { key: string; value: string }[];
|
|
};
|
|
|
|
useSocks5?: boolean;
|
|
socks5Host?: string;
|
|
socks5Port?: number;
|
|
socks5Username?: string;
|
|
socks5Password?: string;
|
|
socks5ProxyChain?: {
|
|
host: string;
|
|
port: number;
|
|
type: 4 | 5 | "http";
|
|
username?: string;
|
|
password?: string;
|
|
}[];
|
|
jumpHosts?: { hostId: string }[];
|
|
portKnockSequence?: {
|
|
port: number;
|
|
protocol: "tcp" | "udp";
|
|
delay: number;
|
|
}[];
|
|
|
|
enableTunnel: boolean;
|
|
serverTunnels: {
|
|
mode: "local" | "remote" | "dynamic";
|
|
bindHost?: string;
|
|
targetHost?: string;
|
|
sourcePort: number;
|
|
endpointHost: string;
|
|
endpointPort: number;
|
|
maxRetries: number;
|
|
retryInterval: number;
|
|
autoStart: boolean;
|
|
}[];
|
|
|
|
enableFileManager: boolean;
|
|
defaultPath?: string;
|
|
|
|
enableDocker: boolean;
|
|
|
|
statsConfig?: {
|
|
statusCheckEnabled: boolean;
|
|
statusCheckInterval: number;
|
|
useGlobalStatusInterval: boolean;
|
|
metricsEnabled: boolean;
|
|
metricsInterval: number;
|
|
useGlobalMetricsInterval: boolean;
|
|
enabledWidgets: string[];
|
|
};
|
|
quickActions: { name: string; snippetId: string }[];
|
|
|
|
enableSsh: boolean;
|
|
enableRdp: boolean;
|
|
enableVnc: boolean;
|
|
enableTelnet: boolean;
|
|
|
|
sshPort: number;
|
|
rdpPort: number;
|
|
vncPort: number;
|
|
telnetPort: number;
|
|
|
|
rdpUser?: string;
|
|
rdpPassword?: string;
|
|
domain?: string;
|
|
security?: string;
|
|
ignoreCert?: boolean;
|
|
|
|
vncPassword?: string;
|
|
vncUser?: string;
|
|
|
|
telnetUser?: string;
|
|
telnetPassword?: string;
|
|
|
|
guacamoleConfig?: Record<string, any>;
|
|
};
|
|
|
|
export type Credential = {
|
|
id: string;
|
|
name: string;
|
|
username: string;
|
|
type: "password" | "key";
|
|
value?: string;
|
|
publicKey?: string;
|
|
passphrase?: string;
|
|
description?: string;
|
|
folder?: string;
|
|
tags?: string[];
|
|
};
|
|
|
|
export type HostFolder = {
|
|
name: string;
|
|
children: (Host | HostFolder)[];
|
|
};
|
|
|
|
export type TabType =
|
|
| "dashboard"
|
|
| "terminal"
|
|
| "rdp"
|
|
| "vnc"
|
|
| "telnet"
|
|
| "stats"
|
|
| "files"
|
|
| "host-manager"
|
|
| "user-profile"
|
|
| "admin-settings"
|
|
| "docker"
|
|
| "tunnel";
|
|
|
|
export type TunnelStatusValue =
|
|
| "CONNECTED"
|
|
| "CONNECTING"
|
|
| "DISCONNECTING"
|
|
| "DISCONNECTED"
|
|
| "ERROR"
|
|
| "WAITING";
|
|
export type TunnelMode = "local" | "remote" | "dynamic";
|
|
|
|
export type Tunnel = {
|
|
id: string;
|
|
hostId: string;
|
|
sourcePort: number;
|
|
endpointHost: string;
|
|
endpointPort: number;
|
|
status: TunnelStatusValue;
|
|
mode: TunnelMode;
|
|
reason?: string;
|
|
retryCount?: number;
|
|
maxRetries?: number;
|
|
};
|
|
|
|
export type Tab = {
|
|
id: string;
|
|
type: TabType;
|
|
label: string;
|
|
host?: Host;
|
|
};
|
|
|
|
export type DockerContainerStatus =
|
|
| "running"
|
|
| "exited"
|
|
| "paused"
|
|
| "created"
|
|
| "restarting";
|
|
|
|
export type DockerContainer = {
|
|
id: string;
|
|
name: string;
|
|
image: string;
|
|
status: DockerContainerStatus;
|
|
cpu: number;
|
|
memory: string;
|
|
ports: string[];
|
|
created: string;
|
|
};
|
|
|
|
export type DashboardCardId =
|
|
| "stats_bar"
|
|
| "counters_bar"
|
|
| "quick_actions"
|
|
| "host_status"
|
|
| "recent_activity"
|
|
| "network_graph";
|
|
|
|
export type DashboardCardConfig = {
|
|
id: DashboardCardId;
|
|
label: string;
|
|
description: string;
|
|
defaultEnabled: boolean;
|
|
};
|
|
|
|
export type CardColSpan = "full" | "wide" | "half" | "narrow";
|
|
export type CardRowSize = "short" | "medium" | "tall" | "flex";
|
|
|
|
export type CardLayoutConfig = {
|
|
id: DashboardCardId;
|
|
colSpan: CardColSpan;
|
|
rowSize: CardRowSize;
|
|
order: number;
|
|
};
|
|
|
|
export type LayoutPresetId = "default" | "compact" | "focus" | "wide";
|
|
|
|
export type LayoutPreset = {
|
|
id: LayoutPresetId;
|
|
label: string;
|
|
description: string;
|
|
cards: CardLayoutConfig[];
|
|
};
|
|
|
|
export type UserProfileSection =
|
|
| "account"
|
|
| "appearance"
|
|
| "security"
|
|
| "api-keys";
|
|
export type AdminSection =
|
|
| "general"
|
|
| "oidc"
|
|
| "users"
|
|
| "sessions"
|
|
| "roles"
|
|
| "database"
|
|
| "api-keys";
|
|
export type AccentColorId = string;
|
|
export type ThemeId =
|
|
| "dark"
|
|
| "light"
|
|
| "system"
|
|
| "dracula"
|
|
| "catppuccin"
|
|
| "nord"
|
|
| "solarized"
|
|
| "tokyo-night"
|
|
| "one-dark"
|
|
| "gruvbox";
|
|
export type FontSizeId = "xs" | "sm" | "md" | "lg" | "xl";
|
|
|
|
export type ToolsTab = "ssh-tools" | "snippets" | "history" | "split-screen";
|
|
export type SplitMode =
|
|
| "none"
|
|
| "2-way"
|
|
| "3-way"
|
|
| "4-way"
|
|
| "5-way"
|
|
| "6-way";
|
|
|
|
export type Snippet = {
|
|
id: number;
|
|
name: string;
|
|
description?: string;
|
|
command: string;
|
|
folderId: number | null;
|
|
};
|
|
|
|
export const FOLDER_ICONS = [
|
|
"folder",
|
|
"server",
|
|
"cloud",
|
|
"database",
|
|
"box",
|
|
"network",
|
|
"copy",
|
|
"settings",
|
|
"cpu",
|
|
"globe",
|
|
] as const;
|
|
export type FolderIconId = (typeof FOLDER_ICONS)[number];
|
|
|
|
export type SnippetFolder = {
|
|
id: number;
|
|
name: string;
|
|
color: string;
|
|
icon: FolderIconId;
|
|
open: boolean;
|
|
};
|
|
|
|
export type HistoryEntry = {
|
|
id: number;
|
|
command: string;
|
|
host: string;
|
|
time: string;
|
|
};
|