/** SSH sessions and the interactive terminal. The SSH connection itself lives in the Rust Core. */ import { call, send, subscribe } from "../transport"; import type { Result, SessionStatus, SshConnectRequest, SshTrustRequest } from "../types"; export const ssh = Object.freeze({ list: () => call("core_ssh_list", "ssh:list"), connect: (payload: SshConnectRequest) => call>("core_ssh_connect", "ssh:connect", payload), trustHostKey: (payload: SshTrustRequest) => call>("core_ssh_trust_host_key", "ssh:trustHostKey", payload), disconnect: (sessionId: string) => call>("core_ssh_disconnect", "ssh:disconnect", { sessionId }), resize: (sessionId: string, cols: number, rows: number) => call>("core_ssh_resize", "ssh:resize", { sessionId, cols, rows }), input: (sessionId: string, data: string) => send("core_ssh_input", { sessionId, data }), onData: (callback: (event: { sessionId: string; data: string }) => void) => subscribe("ssh:data", callback), onState: (callback: (event: SessionStatus) => void) => subscribe("ssh:state", callback), onError: (callback: (event: { sessionId?: string; code?: string; message: string }) => void) => subscribe("ssh:error", callback) });