chore: remote forwarding integration

This commit is contained in:
2026-07-17 18:16:11 +08:00
parent d12c74649a
commit ec9f854136
14 changed files with 1660 additions and 77 deletions
+46
View File
@@ -65,4 +65,50 @@ contextBridge.exposeInMainWorld('api', {
// 离线消息: 启动后让主进程把 pending 重新尝试一遍
flushPending: () => ipcRenderer.invoke('message:flushPending'),
// 远程: 终端
terminalOpen: (peerId: string, opts?: { rows?: number; cols?: number; readOnly?: boolean }) =>
ipcRenderer.invoke('terminal:open', { peerId, ...(opts || {}) }),
terminalInput: (sessionId: string, dataBase64: string) =>
ipcRenderer.invoke('terminal:input', { sessionId, dataBase64 }),
terminalResize: (sessionId: string, rows: number, cols: number) =>
ipcRenderer.invoke('terminal:resize', { sessionId, rows, cols }),
terminalClose: (sessionId: string, reason?: string) =>
ipcRenderer.invoke('terminal:close', { sessionId, reason }),
terminalListSessions: () => ipcRenderer.invoke('terminal:listSessions'),
// 远程: 端口转发
forwardOpen: (peerId: string, args: { direction?: 'self-out' | 'self-in'; listenPort: number; targetHost: string; targetPort: number; ttlSec?: number }) =>
ipcRenderer.invoke('forward:open', { peerId, ...args }),
forwardClose: (sessionId: string) => ipcRenderer.invoke('forward:close', { sessionId }),
forwardListSessions: () => ipcRenderer.invoke('forward:listSessions'),
// 远程: USB / 串口 (3 种模式: serial 字节流 / usb libusb 字节桥 / usbip 真透传)
usbList: (peerId: string) => ipcRenderer.invoke('usb:list', { peerId }),
usbListLocal: () => ipcRenderer.invoke('usb:listLocal'),
usbAttach: (peerId: string, busId: string, opts: { direction?: 'self-out' | 'self-in'; config: any }) =>
ipcRenderer.invoke('usb:attach', { peerId, busId, ...(opts || {}) }),
// 串口: 发送字节
usbSerialSend: (sessionId: string, dataBase64: string) =>
ipcRenderer.invoke('usb:serialSend', { sessionId, dataBase64 }),
// USB: 控制传输
usbCtrlOut: (sessionId: string, setup: any, dataBase64?: string) =>
ipcRenderer.invoke('usb:ctrlOut', { sessionId, setup, dataBase64 }),
usbCtrlIn: (sessionId: string, setup: any, length: number) =>
ipcRenderer.invoke('usb:ctrlIn', { sessionId, setup, length }),
// USB: 批量传输
usbBulkOut: (sessionId: string, endpoint: number, dataBase64: string) =>
ipcRenderer.invoke('usb:bulkOut', { sessionId, endpoint, dataBase64 }),
usbBulkIn: (sessionId: string, endpoint: number, length: number, timeoutMs?: number) =>
ipcRenderer.invoke('usb:bulkIn', { sessionId, endpoint, length, timeoutMs }),
usbDetach: (sessionId: string) => ipcRenderer.invoke('usb:detach', { sessionId }),
usbListSessions: () => ipcRenderer.invoke('usb:listSessions'),
// 授权 / 审计
remoteApprovalList: () => ipcRenderer.invoke('remote:approval:list'),
remoteApprovalReply: (requestId: string, ok: boolean, remember?: boolean) =>
ipcRenderer.invoke('remote:approval:reply', { requestId, ok, remember }),
auditList: (args?: { limit?: number; since?: number; sessionId?: string }) =>
ipcRenderer.invoke('audit:list', args || {}),
auditPrune: (olderThanMs?: number) => ipcRenderer.invoke('audit:prune', olderThanMs),
})