(method, path string, body any)
| 109 | } |
| 110 | |
| 111 | func (c *apiClient) doJSON(method, path string, body any) ([]byte, error) { |
| 112 | var bodyReader io.Reader |
| 113 | if body != nil { |
| 114 | data, err := json.Marshal(body) |
| 115 | if err != nil { |
| 116 | return nil, err |
| 117 | } |
| 118 | bodyReader = bytes.NewReader(data) |
| 119 | } |
| 120 | |
| 121 | req, err := http.NewRequest(method, c.baseURL+path, bodyReader) |
| 122 | if err != nil { |
| 123 | return nil, err |
| 124 | } |
| 125 | req.Header.Set("Content-Type", "application/json") |
| 126 | if c.secret != "" { |
| 127 | req.Header.Set("Authorization", "Bearer "+c.secret) |
| 128 | } |
| 129 | |
| 130 | resp, err := c.http.Do(req) |
| 131 | if err != nil { |
| 132 | return nil, fmt.Errorf("request failed: %w", err) |
| 133 | } |
| 134 | defer resp.Body.Close() |
| 135 | |
| 136 | data, _ := io.ReadAll(resp.Body) |
| 137 | if resp.StatusCode >= 400 { |
| 138 | return nil, fmt.Errorf("HTTP %d: %s", resp.StatusCode, string(data)) |
| 139 | } |
| 140 | return data, nil |
| 141 | } |
| 142 | |
| 143 | func (c *apiClient) getSessions() ([]SessionSummary, error) { |
| 144 | data, err := c.doJSON("GET", "/v0/management/sessions", nil) |
no test coverage detected