The current client takes in configuration parameters directly via the constructor. The issue with this approach is there are a bunch of settings you need to toggle after creating the object, and there are also a bunch of settings that we will probably want to add when constructing the object. The Client class should be updated to take in a ClientSettings object, which should be immutable. The ClientSettings object should be constructed using a ClientSettingsBuilder, which consumers should use and configure before creating a Client. This will provide extensibility without needing to repeatedly add/update the constructors.