Files
ssh-manager/frontend/src/types.ts
T

180 lines
3.8 KiB
TypeScript

export type AuthType = 'PASSWORD' | 'PRIVATE_KEY'
export type ConnectionSetupMode = 'NONE' | 'PASSWORD_BOOTSTRAP'
export type SessionTreeNodeType = 'folder' | 'connection'
export type SessionTreeSortMode = 'manual' | 'nameAsc'
export type WorkspaceLayout = 'split' | 'terminal' | 'sftp'
export type TerminalConnectionStatus = 'idle' | 'connecting' | 'connected' | 'reconnecting' | 'error'
export type ConnectionReachabilityStatus = 'unknown' | 'checking' | 'online' | 'offline'
export interface LoginResponse {
token: string
username: string
displayName: string
passwordChangeRequired: boolean
}
export interface CurrentUser {
username: string
displayName: string
passwordChangeRequired?: boolean
}
export interface Connection {
id: number
name: string
host: string
port: number
username: string
authType: AuthType
createdAt: string
updatedAt: string
}
export interface ConnectionCreateRequest {
name: string
host: string
port?: number
username: string
authType?: AuthType
password?: string
privateKey?: string
passphrase?: string
setupMode?: ConnectionSetupMode
bootstrapPassword?: string
}
export interface ConnectionModalSubmitPayload extends ConnectionCreateRequest {
targetFolderId: string | null
}
export interface SessionTreeNodePayload {
id: string
type: SessionTreeNodeType
name: string
parentId: string | null
order: number
connectionId?: number
expanded?: boolean
createdAt: number
updatedAt: number
}
export interface SessionTreeLayoutPayload {
nodes: SessionTreeNodePayload[]
sortMode?: SessionTreeSortMode
}
export interface SessionTreeFolderOption {
id: string
name: string
depth: number
}
export interface SftpFileInfo {
name: string
directory: boolean
size: number
mtime: number
}
export interface UploadTask {
taskId: string
status: 'queued' | 'running' | 'success' | 'error'
progress: number
transferredBytes: number
totalBytes: number
filename: string
error?: string
createdAt: number
startedAt: number
finishedAt: number
}
export interface UploadConflictResponse {
code: 'SFTP_UPLOAD_CONFLICT'
fileName: string
conflictType: 'file' | 'dir'
canOverwrite: boolean
message: string
}
export interface RemoteTransferTask {
taskId: string
status: 'queued' | 'running' | 'success' | 'error' | 'cancelled'
progress: number
transferredBytes: number
totalBytes: number
error?: string
createdAt: number
startedAt: number
finishedAt: number
}
export interface BatchCommandResult {
connectionId: number
connectionName: string
success: boolean
output: string | null
error: string | null
durationMs: number
}
export interface BatchCommandResponse {
command: string
total: number
successCount: number
failureCount: number
results: BatchCommandResult[]
}
export interface ConnectionStatusItem {
connectionId: number
connectionName: string
status: 'online' | 'offline'
message: string
durationMs: number
}
export interface ConnectionStatusResponse {
total: number
onlineCount: number
offlineCount: number
results: ConnectionStatusItem[]
}
export interface MonitorMetrics {
cpuUsage?: number | null
memTotal?: number | null
memUsed?: number | null
memUsage?: number | null
diskUsage?: number | null
load1?: number | null
cpuCores?: number | null
uptime?: string | null
}
export interface WorkspaceTab {
id: number
name: string
connection: Connection
}
export interface TransferTaskItem {
id: string
label: string
status: 'queued' | 'running' | 'success' | 'error' | 'cancelled'
progress: number
message: string
taskId?: string
}
export interface TransferTaskGroup {
id: string
mode: 'LOCAL_TO_MANY' | 'REMOTE_TO_MANY'
title: string
status: 'queued' | 'running' | 'success' | 'error' | 'cancelled'
progress: number
createdAt: string
items: TransferTaskItem[]
}