Spaces:
Paused
Paused
| package api | |
| import ( | |
| "encoding/json" | |
| "log" | |
| "net/http" | |
| "plandex-cli/auth" | |
| "plandex-cli/term" | |
| "strings" | |
| shared "plandex-shared" | |
| ) | |
| func HandleApiError(r *http.Response, errBody []byte) *shared.ApiError { | |
| // Check if the response is JSON | |
| if r.Header.Get("Content-Type") != "application/json" { | |
| return &shared.ApiError{ | |
| Type: shared.ApiErrorTypeOther, | |
| Status: r.StatusCode, | |
| Msg: strings.TrimSpace(string(errBody)), | |
| } | |
| } | |
| var apiError shared.ApiError | |
| if err := json.Unmarshal(errBody, &apiError); err != nil { | |
| log.Printf("Error unmarshalling JSON: %v\n", err) | |
| return &shared.ApiError{ | |
| Type: shared.ApiErrorTypeOther, | |
| Status: r.StatusCode, | |
| Msg: strings.TrimSpace(string(errBody)), | |
| } | |
| } | |
| // return error if token/auth refresh is needed | |
| if apiError.Type == shared.ApiErrorTypeInvalidToken || apiError.Type == shared.ApiErrorTypeAuthOutdated { | |
| return &apiError | |
| } | |
| term.HandleApiError(&apiError) | |
| return &apiError | |
| } | |
| func refreshAuthIfNeeded(apiErr *shared.ApiError) (bool, *shared.ApiError) { | |
| if apiErr.Type == shared.ApiErrorTypeInvalidToken { | |
| err := auth.RefreshInvalidToken() | |
| if err != nil { | |
| return false, &shared.ApiError{Type: shared.ApiErrorTypeOther, Msg: "error refreshing invalid token"} | |
| } | |
| return true, nil | |
| } else if apiErr.Type == shared.ApiErrorTypeAuthOutdated { | |
| err := auth.RefreshAuth() | |
| if err != nil { | |
| return false, &shared.ApiError{Type: shared.ApiErrorTypeOther, Msg: "error refreshing auth"} | |
| } | |
| return true, nil | |
| } | |
| return false, apiErr | |
| } | |