diff --git a/eightctl-fixed b/eightctl-fixed new file mode 100755 index 0000000..c2e7778 Binary files /dev/null and b/eightctl-fixed differ diff --git a/internal/client/eightsleep.go b/internal/client/eightsleep.go index 55fad67..ca6e616 100644 --- a/internal/client/eightsleep.go +++ b/internal/client/eightsleep.go @@ -2,6 +2,7 @@ package client import ( "bytes" + "compress/gzip" "context" "crypto/tls" "encoding/json" @@ -120,8 +121,8 @@ func (c *Client) authTokenEndpoint(ctx context.Context) error { "grant_type": "password", "username": c.Email, "password": c.Password, - "client_id": "sleep-client", - "client_secret": "", + "client_id": c.ClientID, + "client_secret": c.ClientSecret, } body, _ := json.Marshal(payload) req, err := http.NewRequestWithContext(ctx, http.MethodPost, authURL, bytes.NewReader(body)) @@ -305,7 +306,17 @@ func (c *Client) do(ctx context.Context, method, path string, query url.Values, return fmt.Errorf("api %s %s: %s", method, path, string(b)) } if out != nil { - return json.NewDecoder(resp.Body).Decode(out) + // Handle gzip-compressed responses + var reader io.Reader = resp.Body + if resp.Header.Get("Content-Encoding") == "gzip" { + gzReader, err := gzip.NewReader(resp.Body) + if err != nil { + return fmt.Errorf("failed to create gzip reader: %w", err) + } + defer gzReader.Close() + reader = gzReader + } + return json.NewDecoder(reader).Decode(out) } return nil }