Files
opsxshell/shared/types/ipc.types.ts
T
Logan.Li 484d850abd feat: v0.3.0 版本 - SSH终端、SFTP、端口转发功能实现
核心功能:
- SSH终端: 密码/密钥认证、XTerm.js终端、多主题配色、IP高亮
- SFTP管理: 双栏文件管理、上传下载、传输队列
- 端口转发: 本地/远程转发、SOCKS5动态代理、规则管理

架构改进:
- 拆分大型组件 (SFTPView/TabBar/Sidebar)
- 添加统一日志和错误处理
- 修复React严格模式下的终端黑屏问题

UI更新:
- 新增端口转发视图
- 更新UI预览文档
- 左侧栏右键菜单支持SFTP快捷打开
2026-04-06 01:20:47 +08:00

249 lines
4.9 KiB
TypeScript

/**
* IPC Types - 统一的 IPC 类型定义
* 定义所有 IPC 请求/响应的类型
*/
import type { Session } from './session.types'
// ============== SSH IPC ==============
export interface SSHConnectRequest {
host: string
port: number
username: string
password?: string
privateKey?: string
passphrase?: string
}
export interface SSHConnectResponse {
success: boolean
connectionId?: string
error?: string
}
export interface SSHExecRequest {
connectionId: string
command: string
}
export interface SSHExecResponse {
success: boolean
output?: string
error?: string
}
export interface SSHCreateShellRequest {
connectionId: string
cols?: number
rows?: number
}
export interface SSHCreateShellResponse {
success: boolean
shellId?: string
error?: string
}
export interface SSHShellWriteRequest {
shellId: string
data: string
}
export interface SSHShellResizeRequest {
shellId: string
cols: number
rows: number
}
// ============== Port Forward IPC ==============
export interface SSHForwardLocalRequest {
connectionId: string
localPort: number
remoteHost: string
remotePort: number
}
export interface SSHForwardRemoteRequest {
connectionId: string
remotePort: number
localHost: string
localPort: number
}
export interface SSHForwardDynamicRequest {
connectionId: string
localPort: number
}
export interface SSHForwardResponse {
success: boolean
boundPort?: number
error?: string
}
// ============== Session IPC ==============
export interface SessionCreateResponse {
success: boolean
session?: Session
error?: string
}
export interface SessionUpdateResponse {
success: boolean
session?: Session
error?: string
}
export interface SessionDeleteResponse {
success: boolean
error?: string
}
// ============== Settings IPC ==============
export interface SettingsGetRequest {
key: string
}
export interface SettingsSetRequest {
key: string
value: unknown
}
// ============== Dialog IPC ==============
export interface DialogOptions {
title?: string
defaultPath?: string
filters?: { name: string; extensions: string[] }[]
properties?: ('openFile' | 'openDirectory' | 'multiSelections')[]
}
export interface DialogResult {
canceled: boolean
filePath?: string
filePaths?: string[]
}
// ============== File IPC ==============
export interface FileReadRequest {
filePath: string
}
export interface FileWriteRequest {
filePath: string
data: string
}
export interface FileOperationResponse {
success: boolean
error?: string
}
export interface FileStats {
size: number
modified: number
isDirectory: boolean
isFile: boolean
}
export interface DirEntry {
name: string
path: string
isDirectory: boolean
}
// ============== Zmodem IPC ==============
export interface ZmodemProgress {
sessionId: string
fileName: string
progress: number
bytesTransferred: number
totalBytes: number
}
export interface ZmodemComplete {
sessionId: string
success: boolean
fileName?: string
error?: string
}
// ============== App IPC ==============
export interface AppVersionResponse {
version: string
}
// ============== IPC Channel Names ==============
export const IPC_CHANNELS = {
// SSH
SSH_CONNECT: 'ssh:connect',
SSH_DISCONNECT: 'ssh:disconnect',
SSH_EXEC: 'ssh:exec',
SSH_CREATE_SHELL: 'ssh:createShell',
SSH_SHELL_WRITE: 'ssh:shellWrite',
SSH_SHELL_RESIZE: 'ssh:shellResize',
SSH_FORWARD_LOCAL: 'ssh:forwardLocal',
SSH_FORWARD_REMOTE: 'ssh:forwardRemote',
SSH_FORWARD_DYNAMIC: 'ssh:forwardDynamic',
// SFTP
SFTP_CONNECT: 'sftp:connect',
SFTP_LIST_DIRECTORY: 'sftp:listDirectory',
SFTP_UPLOAD: 'sftp:upload',
SFTP_DOWNLOAD: 'sftp:download',
SFTP_RENAME: 'sftp:rename',
SFTP_DELETE: 'sftp:delete',
// Session
SESSION_CREATE: 'session:create',
SESSION_GET_ALL: 'session:getAll',
SESSION_GET_BY_ID: 'session:getById',
SESSION_UPDATE: 'session:update',
SESSION_DELETE: 'session:delete',
// Settings
SETTINGS_GET: 'settings:get',
SETTINGS_SET: 'settings:set',
// Dialog
DIALOG_SHOW_SAVE: 'dialog:showSaveDialog',
DIALOG_SHOW_OPEN: 'dialog:showOpenDialog',
// App
APP_GET_VERSION: 'app:getVersion',
APP_GET_DOWNLOADS_PATH: 'app:getDownloadsPath',
// File
FILE_READ: 'file:read',
FILE_WRITE: 'file:write',
LOCAL_GET_HOME: 'local:getHome',
LOCAL_READ_DIR: 'local:readDir',
LOCAL_GET_STATS: 'local:getStats',
LOCAL_DELETE: 'local:delete',
LOCAL_RENAME: 'local:rename',
LOCAL_MKDIR: 'local:mkdir',
// Zmodem
ZMODEM_SEND: 'zmodem:send',
ZMODEM_RECEIVE: 'zmodem:receive',
ZMODEM_CANCEL: 'zmodem:cancel',
// Events (renderer listens)
SHELL_DATA: 'ssh:shellData',
SFTP_PROGRESS: 'sftp:progress',
ZMODEM_PROGRESS: 'zmodem:progress',
ZMODEM_COMPLETE: 'zmodem:complete',
MENU_NEW_SESSION: 'menu-new-session',
MENU_QUICK_CONNECT: 'menu-quick-connect',
MENU_IMPORT_SESSIONS: 'menu-import-sessions',
MENU_EXPORT_SESSIONS: 'menu-export-sessions',
} as const