private async Task <JObject> invoke(InvokeParams invokeParams)
        {
            // validate arguments
            if (invokeParams == null)
            {
                throw new ArgumentNullException("invokeParam");
            }
            if (invokeParams.spCall == null)
            {
                throw new ArgumentNullException("invokeParams.spCall");
            }
            if (string.IsNullOrWhiteSpace(invokeParams.spCall.method))
            {
                throw new ArgumentNullException("invokeParams.spCall.method");
            }

            // set defaults
            if (invokeParams.invokeOptions == null)
            {
                invokeParams.invokeOptions = new InvokeOptions();
            }

            //append request id
            invokeParams.invokeOptions.RequestId = Guid.NewGuid().ToString();

            var content = JsonConvert.SerializeObject(invokeParams);

            return(await invokePost(invokeParams.spCall.method, content));
        }
        public async Task <JObject> invoke(SpCall spCall, InvokeOptions invokeOptions = null)
        {
            var invokeParams = new InvokeParams()
            {
                spCall        = spCall,
                invokeOptions = invokeOptions,
            };

            return(await invoke(invokeParams));
        }