Heat a large pot over medium heat. Add the olive oil.
Add the onions and garlic and saute until the onions are soft and the garlic is fragrant.
Add the basil, salt, and pepper.
Add the wine (if using) and let the wine reduce almost completely.
Add the tomato puree and stir well to combine. Continue cooking the mixture over medium heat for about 5-7 minutes or until the tomato darkens in colour slightly (this will help remove some of the sharpness and intense acidity from the tomato flavour).
Add the chicken or beef stock (I like to use beef stock in this recipe for richness, but chicken or vegetable stock work well too) and stir to combine.
Cook well over medium-low heat for about 15-20 minutes.
Reduce the heat to low and add the cream. Stir to combine, then puree in a blender (or with a hand blender) until creamy and smooth, then serve.