From 2909e0d1b4c0a98d402e87b901b72aa127ccfc28 Mon Sep 17 00:00:00 2001 From: Martin McCaffery Date: Fri, 14 Nov 2025 12:11:24 +0100 Subject: [PATCH] feat(api): add nicer error message to format issues indicating permission denied --- sdk/edgeconnect/appinstance.go | 4 ++++ sdk/edgeconnect/apps.go | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/sdk/edgeconnect/appinstance.go b/sdk/edgeconnect/appinstance.go index 2a6673c..34e3486 100644 --- a/sdk/edgeconnect/appinstance.go +++ b/sdk/edgeconnect/appinstance.go @@ -213,6 +213,10 @@ func (c *Client) parseStreamingAppInstanceResponse(resp *http.Response, result i var errorMessage string parseErr := sdkhttp.ParseJSONLines(resp.Body, func(line []byte) error { + // On permission denied, Edge API returns just an empty array []! + if len(line) == 0 || line[0] == '[' { + return fmt.Errorf("%w", ErrFaultyResponsePerhaps403) + } // Try parsing as ResultResponse first (error format) var resultResp ResultResponse if err := json.Unmarshal(line, &resultResp); err == nil && resultResp.Result.Message != "" { diff --git a/sdk/edgeconnect/apps.go b/sdk/edgeconnect/apps.go index f197a68..a086475 100644 --- a/sdk/edgeconnect/apps.go +++ b/sdk/edgeconnect/apps.go @@ -15,7 +15,8 @@ import ( var ( // ErrResourceNotFound indicates the requested resource was not found - ErrResourceNotFound = fmt.Errorf("resource not found") + ErrResourceNotFound = fmt.Errorf("resource not found") + ErrFaultyResponsePerhaps403 = fmt.Errorf("faulty response from API, may indicate permission denied") ) // CreateApp creates a new application in the specified region @@ -179,6 +180,10 @@ func (c *Client) parseStreamingResponse(resp *http.Response, result interface{}) var responses []Response[App] parseErr := sdkhttp.ParseJSONLines(resp.Body, func(line []byte) error { + // On permission denied, Edge API returns just an empty array []! + if len(line) == 0 || line[0] == '[' { + return fmt.Errorf("%w", ErrFaultyResponsePerhaps403) + } var response Response[App] if err := json.Unmarshal(line, &response); err != nil { return err