public async Task ExportContentByKeyAsync(string authorization, string key, string outputFilePath, string excel = null)
        {
            if (string.IsNullOrEmpty(authorization))
            {
                throw new ArgumentNullException(nameof(authorization));
            }

            if (string.IsNullOrEmpty(outputFilePath))
            {
                throw new ArgumentNullException(nameof(outputFilePath));
            }

            var blipClient = _blipClientFactory.GetInstanceForBucket(authorization);

            //var key = "blip_portal:builder_working_flow";

            _logger.LogDebug("Bucket Export\n");

            var data = await blipClient.GetDocumentAsync(key, BucketNamespace.Document);

            if (data.HasValue)
            {
                var asString = JsonConvert.SerializeObject(data.Value.Value);
                var flow     = Path.Combine(outputFilePath, "bucket.json");
                _fileManagerService.CreateDirectoryIfNotExists(outputFilePath);
                using (var fw = new StreamWriter(flow, false, Encoding.UTF8))
                {
                    await fw.WriteAsync(asString);
                }
            }

            _logger.LogDebug("DONE\n");
        }
        public async override Task <int> RunAsync(string[] args)
        {
            if ((!FromAuthorization.IsSet) || (!ToAuthorization.IsSet))
            {
                throw new ArgumentNullException("You must provide from and to parameters for this action. Use '-f' [--from] (or '--fa' [--fromAuthorization]) and '-t' [--to] (or '--ta' [--toAuthorization]) parameters");
            }

            string fromAuthorization = FromAuthorization.Value;
            string toAuthorization   = ToAuthorization.Value;

            IBlipBucketClient sourceBlipBucketClient = _blipClientFactory.GetInstanceForBucket(fromAuthorization);
            IBlipBucketClient targetBlipBucketClient = _blipClientFactory.GetInstanceForBucket(toAuthorization);

            IBlipAIClient sourceBlipAIClient = _blipClientFactory.GetInstanceForAI(fromAuthorization);
            IBlipAIClient targetBlipAIClient = _blipClientFactory.GetInstanceForAI(toAuthorization);

            foreach (var content in Contents.Value)
            {
                //if IAModel handle in a different way
                if (content.Equals(BucketNamespace.AIModel))
                {
                    await CopyAIModelAsync(fromAuthorization, toAuthorization, sourceBlipAIClient, targetBlipAIClient);
                }
                else
                {
                    var documentKeysToCopy = await sourceBlipBucketClient.GetAllDocumentKeysAsync(content) ?? new DocumentCollection();

                    var documentPairsToCopy = await sourceBlipBucketClient.GetAllDocumentsAsync(documentKeysToCopy, content);

                    if (documentPairsToCopy != null)
                    {
                        foreach (var resourcePair in documentPairsToCopy)
                        {
                            await targetBlipBucketClient.AddDocumentAsync(resourcePair.Key, resourcePair.Value, content);
                        }
                    }
                }
            }

            return(0);
        }