package kook import ( "context" "encoding/json" "fmt" "net/url" ) // gatewayResult is the "data" payload of GET /gateway/index. type gatewayResult struct { URL string `json:"url"` } // fetchGatewayURL retrieves the gateway WebSocket address from the KOOK REST // API. compress=0 requests uncompressed delivery so every server->client frame is // plain JSON text, matching wsutil's reader. func (a *Adapter) fetchGatewayURL(ctx context.Context) (string, error) { data, err := a.http.GetJSON(ctx, gatewayPath, url.Values{"compress": {"0"}}) if err != nil { return "", fmt.Errorf("kook: fetch gateway: %w", err) } var res gatewayResult if err := json.Unmarshal(data, &res); err != nil { return "", fmt.Errorf("kook: decode gateway result: %w", err) } if res.URL == "" { return "", fmt.Errorf("kook: gateway url empty: %w", ErrBadResponse) } return res.URL, nil }