public CoinbaseProExchangeClient(string apiKey, string apiSecret, string passphrase, string fiatCurrency, FiatExchangeRateConverter exchangeRateConverter, Dictionary <string, string> currencyOverrides, ILogger logger) { _client = new HttpClient { BaseAddress = new Uri("https://api.pro.coinbase.com") }; _client.DefaultRequestHeaders.Add("User-Agent", "CoinbaseProApiClient"); _client.DefaultRequestHeaders.Add("Accept", "application/json"); _client.DefaultRequestHeaders.Add("CB-ACCESS-KEY", apiKey); _client.DefaultRequestHeaders.Add("CB-ACCESS-PASSPHRASE", passphrase); _apiSecret = apiSecret; _fiatCurrency = fiatCurrency; _exchangeRateConverter = exchangeRateConverter; _currencyOverrides = currencyOverrides; _logger = logger; }
public Context() { var settings = AppSettings.Instance; var clients = settings.Clients.Split(','); var exchangeClients = new Dictionary <string, ICryptoExchangeClient>(); _exchangeRateConverter = new FiatExchangeRateConverter(settings.FiatCurrency, settings.FiatCurrencyExchangeRateRefreshInterval, settings.OpenExchangeRatesAppId); _logger = new FileLogger(Constants.LogFilename); foreach (var client in clients) { switch (client.Trim().ToLowerInvariant()) { // ReSharper disable StringLiteralTypo case "coinbaseexchangeclient": exchangeClients.Add("Coinbase", new CoinbaseExchangeClient(settings.CoinbaseCredentials.ApiKey, settings.CoinbaseCredentials.ApiSecret, settings.FiatCurrency)); break; case "coinbaseproexchangeclient": foreach (var credentials in settings.CoinbaseProCredentials) { exchangeClients.Add($"Coinbase Pro - {credentials.Portfolio}", new CoinbaseProExchangeClient(credentials.ApiKey, credentials.ApiSecret, credentials.Passphrase, settings.FiatCurrency, _exchangeRateConverter, settings.ExchangeRateFallbacks ?.Where(f => f.Exchange.Equals( "coinbasepro", StringComparison.InvariantCultureIgnoreCase)) .ToDictionary(f => f.CryptoCurrency, f => f.FiatCurrency), _logger)); } break; case "binanceexchangeclient": exchangeClients.Add("Binance", new BinanceExchangeClient(settings.BinanceCredentials.ApiKey, settings.BinanceCredentials.SecretKey, settings.FiatCurrency)); break; default: throw new MoneyMonitorConfigurationException($"Unknown API client {client}."); // ReSharper restore StringLiteralTypo } } _historyManager = new HistoryManager(Constants.HistoryLength, Constants.HistoryFilename, settings.FiatCurrency); _historyManager.Load(); _formManager = new FormManager(_historyManager); _formManager.RestoreState(); _trayManager = new TrayManager(_formManager) { ExitClicked = ExitClicked, IconClicked = IconClicked, TopMostToggled = TopMostToggled, ShowCurrencyHistoryClicked = ShowCurrencyHistoryClicked, HideCurrencyHistoryClicked = HideCurrencyHistoryClicked, RefreshClicked = RefreshClicked }; _exchangeAggregator = new ExchangeAggregator(exchangeClients); _poller = new ExchangeApiPoller(_logger, _exchangeAggregator, Polled); _poller.StartPolling(settings.PollInterval); }