public Task<AuctionResponse> PlaceBidAsync(AuctionInfo auctionInfo, uint bidAmount = 0)
        {
            auctionInfo.ThrowIfNullArgument();

            if (bidAmount == 0)
            {
                bidAmount = auctionInfo.CalculateBid();
            }

            return _requestFactories.PlaceBidRequestFactory(auctionInfo, bidAmount).PerformRequestAsync();
        }
        public async Task<Item> GetItemAsync(AuctionInfo auctionInfo)
        {
            auctionInfo.ThrowIfNullArgument();

            try
            {
                return await _requestFactories.ItemRequestFactory(auctionInfo).PerformRequestAsync();
            }
            catch (Exception e)
            {
                throw new FutException("Get item failed", e);
            }
        }
        public async Task<AuctionResponse> PlaceBidAsync(AuctionInfo auctionInfo, uint bidAmount = 0)
        {
            auctionInfo.ThrowIfNullArgument();

            if (bidAmount == 0)
            {
                bidAmount = auctionInfo.CalculateBid();
            }

            try
            {
                return await _requestFactories.PlaceBidRequestFactory(auctionInfo, bidAmount).PerformRequestAsync();
            }
            catch (Exception e)
            {
                throw new FutException("Placing bid failed", e);
            }
        }
        public Task<byte[]> GetPlayerImageAsync(AuctionInfo auctionInfo)
        {
            auctionInfo.ThrowIfNullArgument();

            return _requestFactories.PlayerImageRequestFactory(auctionInfo).PerformRequestAsync();
        }
        public Task<Item> GetItemAsync(AuctionInfo auctionInfo)
        {
            auctionInfo.ThrowIfNullArgument();

            return _requestFactories.ItemRequestFactory(auctionInfo).PerformRequestAsync();
        }
        public Task RemoveFromTradePileAsync(AuctionInfo auctionInfo)
        {
            auctionInfo.ThrowIfNullArgument();

            return _requestFactories.RemoveFromTradePileRequestFactory(auctionInfo).PerformRequestAsync();
        }
 public Task RemoveFromWatchlistAsync(AuctionInfo auctionInfo)
 {
     return RemoveFromWatchlistAsync(new[] { auctionInfo });
 }
        public async Task<byte[]> GetPlayerImageAsync(AuctionInfo auctionInfo)
        {
            auctionInfo.ThrowIfNullArgument();

            try
            {
                return await _requestFactories.PlayerImageRequestFactory(auctionInfo).PerformRequestAsync();
            }
            catch (Exception e)
            {
                throw new FutException("Get player image failed", e);
            }
        }
 public Task AddToWatchlistRequestAsync(AuctionInfo auctionInfo)
 {
     return AddToWatchlistRequestAsync(new[] { auctionInfo });
 }
        public async Task RemoveFromTradePileAsync(AuctionInfo auctionInfo)
        {
            auctionInfo.ThrowIfNullArgument();

            try
            {
                await _requestFactories.RemoveFromTradePileRequestFactory(auctionInfo).PerformRequestAsync();
            }
            catch (Exception e)
            {
                throw new FutException("Remove from trade pile failed", e);
            }
        }