From 26481bc0032869ae6d75c9f4781edb324d4664b2 Mon Sep 17 00:00:00 2001 From: dj-oyu <68707227+dj-oyu@users.noreply.github.com> Date: Tue, 24 Feb 2026 05:30:04 +0900 Subject: [PATCH] fix: clear HTTP deadlines before WebSocket upgrade in miniapp log viewer The HTTP server's WriteTimeout/ReadTimeout (5s) was killing WebSocket connections after ~5 seconds. Clear deadlines before Upgrade(), matching the existing pattern in the SSE handler. Also allow same-origin WebSocket connections for Tailscale direct access. Co-Authored-By: Claude Opus 4.6 --- pkg/miniapp/miniapp.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pkg/miniapp/miniapp.go b/pkg/miniapp/miniapp.go index f9e332cb8..0c33b1087 100644 --- a/pkg/miniapp/miniapp.go +++ b/pkg/miniapp/miniapp.go @@ -220,6 +220,10 @@ var wsUpgrader = websocket.Upgrader{ if origin == "" { return true // non-browser clients (e.g. curl) } + // Allow same-origin requests (e.g. Tailscale direct access) + if u, err := url.Parse(origin); err == nil && u.Host == r.Host { + return true + } // Allow Telegram WebApp origins and localhost for dev return strings.HasSuffix(origin, ".telegram.org") || strings.HasSuffix(origin, ".t.me") || @@ -884,6 +888,11 @@ func (h *Handler) wsLogs(w http.ResponseWriter, r *http.Request) { minLevel = logger.ParseLevel(levelStr) } + // Clear HTTP server deadlines before WebSocket hijack + rc := http.NewResponseController(w) + _ = rc.SetWriteDeadline(time.Time{}) + _ = rc.SetReadDeadline(time.Time{}) + conn, err := wsUpgrader.Upgrade(w, r, nil) if err != nil { return