From 92c2e8a56c7eb9a5a99439133220d707710da0f8 Mon Sep 17 00:00:00 2001 From: Bruce MacDonald Date: Wed, 16 Jul 2025 11:03:28 -0700 Subject: [PATCH] api: fix unreachable status err (#11423) StatusError was unreachable, the client always checked for error messages in the response body first, and the server always includes error messages with HTTP error status codes. --- api/client.go | 8 ++++---- api/client_test.go | 10 ++++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/api/client.go b/api/client.go index 9f0dba8dce..7cc2acb3d1 100644 --- a/api/client.go +++ b/api/client.go @@ -222,10 +222,6 @@ func (c *Client) stream(ctx context.Context, method, path string, data any, fn f return fmt.Errorf("unmarshal: %w", err) } - if errorResponse.Error != "" { - return errors.New(errorResponse.Error) - } - if response.StatusCode >= http.StatusBadRequest { return StatusError{ StatusCode: response.StatusCode, @@ -234,6 +230,10 @@ func (c *Client) stream(ctx context.Context, method, path string, data any, fn f } } + if errorResponse.Error != "" { + return errors.New(errorResponse.Error) + } + if err := fn(bts); err != nil { return err } diff --git a/api/client_test.go b/api/client_test.go index 2ceeec9cf6..f0034e02d3 100644 --- a/api/client_test.go +++ b/api/client_test.go @@ -89,6 +89,16 @@ func TestClientStream(t *testing.T) { }, wantErr: "mid-stream error", }, + { + name: "http status error takes precedence over general error", + responses: []any{ + testError{ + message: "custom error message", + statusCode: http.StatusInternalServerError, + }, + }, + wantErr: "500", + }, { name: "successful stream completion", responses: []any{