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;
        }
Пример #2
0
        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);
        }