fix: refresh action cache and classify auth failures

This commit is contained in:
2026-07-21 15:26:32 +08:00
parent 2cbac73f2a
commit 3f05417b83
4 changed files with 138 additions and 11 deletions
+9 -1
View File
@@ -201,6 +201,10 @@ func (client *Client) request(ctx context.Context, uri string, data any, refresh
return nil, fmt.Errorf("read API response: %w", err)
}
if response.StatusCode < 200 || response.StatusCode >= 300 {
if response.StatusCode == http.StatusUnauthorized || response.StatusCode == http.StatusForbidden {
loginErr := &LoginError{Code: response.StatusCode, Message: strings.TrimSpace(string(body))}
return nil, fmt.Errorf("API HTTP status from %s: %w: %w", uri, ErrReauthenticationRequired, loginErr)
}
return nil, fmt.Errorf("API HTTP status %d: %s", response.StatusCode, strings.TrimSpace(string(body)))
}
result, err := decodeAPIResponse(authData.Ssecurity, nonce, body)
@@ -234,7 +238,11 @@ func decodeAPIResponse(ssecurity, nonce string, body []byte) (json.RawMessage, e
if message == "" {
message = "未知错误"
}
return nil, &APIError{Code: envelope.Code, Message: message}
apiErr := &APIError{Code: envelope.Code, Message: message}
if envelope.Code == -10020 || envelope.Code == -10030 {
return nil, fmt.Errorf("%w: %w", ErrReauthenticationRequired, apiErr)
}
return nil, apiErr
}
return envelope.Result, nil
}