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