package mihomoapi import ( "context" "encoding/json" "fmt" "net/http" "time" ) type TrafficRates struct { Up int64 `json:"up"` Down int64 `json:"down"` UpTotal int64 `json:"upTotal"` DownTotal int64 `json:"downTotal"` } // TrafficRates reads the first frame from Mihomo's streaming /traffic endpoint. func (c *Client) TrafficRates(ctx context.Context) (TrafficRates, error) { var zero TrafficRates req, err := http.NewRequestWithContext(ctx, http.MethodGet, c.base+"/traffic", nil) if err != nil { return zero, err } if c.secret != "" { req.Header.Set("Authorization", "Bearer "+c.secret) } client := &http.Client{Timeout: 5 * time.Second} resp, err := client.Do(req) if err != nil { return zero, err } defer resp.Body.Close() if resp.StatusCode >= 400 { return zero, fmt.Errorf("mihomo api %d", resp.StatusCode) } var rates TrafficRates if err := json.NewDecoder(resp.Body).Decode(&rates); err != nil { return zero, err } return rates, nil }