Heat 1 tablespoon oil in a large saucepan over medium-high heat. Sauté shallot and onion until soft and translucent, about 5 minutes.
Add the butter, lemon juice, ginger-garlic paste, garam masala, chili powder, cumin, coriander, and bay leaf. Cook, stirring for 1 minute to release the fragrance of the spices.
Add tomato puree and cook for 2 minutes, stirring frequently.
Pour in the heavy cream and cayenne pepper. Bring the mixture to a simmer and cook for 10 minutes, stirring occasionally. The sauce should thicken slightly.
While the sauce simmers, heat the remaining tablespoon of oil in a separate pan over medium heat. Add the chicken pieces and cook until lightly browned, about 5-7 minutes.
Transfer the chicken to the sauce and simmer for an additional 10-15 minutes, or until the chicken is fully cooked and tender.
Taste and adjust seasoning with salt as needed.
Garnish with fresh chopped cilantro before serving.