cmd/tsconnect: output errors to the JS console too

We were just outputting them to the terminal, but that's hard to debug
because we immediately tear down the terminal when getting an error.

Signed-off-by: Mihai Parparita <mihai@tailscale.com>
This commit is contained in:
Mihai Parparita 2022-08-29 18:12:52 -07:00 committed by Mihai Parparita
parent 122bd667dc
commit 27f36f77c3
3 changed files with 24 additions and 9 deletions

View File

@ -27,26 +27,39 @@ export function runSSHSession(
term.focus()
const sshSession = ipn.ssh(def.hostname, def.username, {
writeFn: (input) => term.write(input),
setReadFn: (hook) => (onDataHook = hook),
let resizeObserver: ResizeObserver | undefined
let handleBeforeUnload: ((e: BeforeUnloadEvent) => void) | undefined
const sshSession = ipn.ssh(def.hostname + "2", def.username, {
writeFn(input) {
term.write(input)
},
writeErrorFn(err) {
console.error(err)
term.write(err)
},
setReadFn(hook) {
onDataHook = hook
},
rows: term.rows,
cols: term.cols,
onDone: () => {
resizeObserver.disconnect()
onDone() {
resizeObserver?.disconnect()
term.dispose()
window.removeEventListener("beforeunload", handleBeforeUnload)
if (handleBeforeUnload) {
window.removeEventListener("beforeunload", handleBeforeUnload)
}
onDone()
},
})
// Make terminal and SSH session track the size of the containing DOM node.
const resizeObserver = new ResizeObserver(() => fitAddon.fit())
resizeObserver = new ResizeObserver(() => fitAddon.fit())
resizeObserver.observe(termContainerNode)
term.onResize(({ rows, cols }) => sshSession.resize(rows, cols))
// Close the session if the user closes the window without an explicit
// exit.
const handleBeforeUnload = () => sshSession.close()
handleBeforeUnload = () => sshSession.close()
window.addEventListener("beforeunload", handleBeforeUnload)
}

View File

@ -19,6 +19,7 @@ declare global {
username: string,
termConfig: {
writeFn: (data: string) => void
writeErrorFn: (err: string) => void
setReadFn: (readFn: (data: string) => void) => void
rows: number
cols: number

View File

@ -347,6 +347,7 @@ type jsSSHSession struct {
func (s *jsSSHSession) Run() {
writeFn := s.termConfig.Get("writeFn")
writeErrorFn := s.termConfig.Get("writeErrorFn")
setReadFn := s.termConfig.Get("setReadFn")
rows := s.termConfig.Get("rows").Int()
cols := s.termConfig.Get("cols").Int()
@ -357,7 +358,7 @@ func (s *jsSSHSession) Run() {
writeFn.Invoke(s)
}
writeError := func(label string, err error) {
write(fmt.Sprintf("%s Error: %v\r\n", label, err))
writeErrorFn.Invoke(fmt.Sprintf("%s Error: %v\r\n", label, err))
}
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)