Skip to content

Commit

Permalink
Add RequestError and GraphQLError types to indicate server failure an…
Browse files Browse the repository at this point in the history
…d graphql failure.
  • Loading branch information
zhenlu committed Apr 11, 2024
1 parent a631538 commit 30f36bb
Showing 1 changed file with 38 additions and 6 deletions.
44 changes: 38 additions & 6 deletions requester/requester.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,40 @@ import (
"encoding/base64"
"encoding/json"
"errors"
"io/ioutil"
"io"
"math/big"
"net/http"
"net/url"
"regexp"
"runtime"
"strconv"
"strings"
"time"

lightspark "github.com/lightsparkdev/go-sdk"
)

type RequestError struct {
Message string
StatusCode int
}

func (e RequestError) Error() string {
return "lightspark request failed: " + strconv.Itoa(e.StatusCode) + ": " + e.Message
}

type GraphQLError struct {
Message string
ErrorName *string
}

func (e GraphQLError) Error() string {
if e.ErrorName != nil {
return *e.ErrorName + ": " + e.Message
}
return e.Message
}

type Requester struct {
ApiTokenClientId string

Expand Down Expand Up @@ -118,6 +140,9 @@ func (r *Requester) ExecuteGraphql(query string, variables map[string]interface{
}

request, err := http.NewRequest("POST", serverUrl, bytes.NewBuffer(encodedPayload))
if err != nil {
return nil, err
}
request.SetBasicAuth(r.ApiTokenClientId, r.ApiTokenClientSecret)
request.Header.Add("Content-Type", "application/json")
request.Header.Add("X-GraphQL-Operation", operationName)
Expand All @@ -133,6 +158,9 @@ func (r *Requester) ExecuteGraphql(query string, variables map[string]interface{
"v": 1,
"signature": base64.StdEncoding.EncodeToString(signature),
})
if err != nil {
return nil, err
}
request.Header.Add("X-Lightspark-Signing", bytes.NewBuffer(signaturePayloadBytes).String())
}

Expand All @@ -146,10 +174,14 @@ func (r *Requester) ExecuteGraphql(query string, variables map[string]interface{
}
defer response.Body.Close()
if response.StatusCode < 200 || response.StatusCode > 299 {
return nil, errors.New("lightspark request failed: " + response.Status)
return nil, RequestError { Message: response.Status, StatusCode: response.StatusCode }
}

data, err := io.ReadAll(response.Body)
if err != nil {
return nil, err
}

data, err := ioutil.ReadAll(response.Body)
var result map[string]interface{}
err = json.Unmarshal(data, &result)
if err != nil {
Expand All @@ -161,14 +193,14 @@ func (r *Requester) ExecuteGraphql(query string, variables map[string]interface{
errMap := err.(map[string]interface{})
errorMessage := errMap["message"].(string)
if errMap["extensions"] == nil {
return nil, errors.New(errorMessage)
return nil, GraphQLError{Message: errorMessage, ErrorName: nil}
}
extensions := errMap["extensions"].(map[string]interface{})
if extensions["error_name"] == nil {
return nil, errors.New(errorMessage)
return nil, GraphQLError{Message: errorMessage, ErrorName: nil}
}
errorName := extensions["error_name"].(string)
return nil, errors.New(errorName + " - " + errorMessage)
return nil, GraphQLError{Message: errorMessage, ErrorName: &errorName}
}

return result["data"].(map[string]interface{}), nil
Expand Down

0 comments on commit 30f36bb

Please sign in to comment.