/// <summary> /// Creates new instance of <see cref="RestClient"/> object. /// </summary> /// <param name="keyId">Application key identifier.</param> /// <param name="secretKey">Application secret key.</param> /// <param name="alpacaRestApi">Alpaca REST API endpoint URL.</param> /// <param name="polygonRestApi">Polygon REST API endpoint URL.</param> /// <param name="alpacaDataApi">Alpaca REST data API endpoint URL.</param> /// <param name="apiVersion">Version of Alpaca api to call. Valid values are "1" or "2".</param> /// <param name="dataApiVersion">Version of Alpaca data API to call. The only valid value is currently "1".</param> /// <param name="isStagingEnvironment">If <c>true</c> use staging.</param> /// <param name="throttleParameters">Parameters for requests throttling.</param> public RestClient( String keyId, String secretKey, Uri alpacaRestApi, Uri polygonRestApi, Uri alpacaDataApi, Int32 apiVersion, Int32 dataApiVersion, Boolean isStagingEnvironment, ThrottleParameters throttleParameters) { keyId = keyId ?? throw new ArgumentException(nameof(keyId)); secretKey = secretKey ?? throw new ArgumentException(nameof(secretKey)); if (!_supportedApiVersions.Contains(apiVersion)) { throw new ArgumentException(nameof(apiVersion)); } if (!_supportedDataApiVersions.Contains(dataApiVersion)) { throw new ArgumentException(nameof(dataApiVersion)); } _alpacaRestApiThrottler = throttleParameters.GetThrottler(); _alpacaHttpClient.DefaultRequestHeaders.Add( "APCA-API-KEY-ID", keyId); _alpacaHttpClient.DefaultRequestHeaders.Add( "APCA-API-SECRET-KEY", secretKey); _alpacaHttpClient.DefaultRequestHeaders.Accept .Add(new MediaTypeWithQualityHeaderValue("application/json")); _alpacaHttpClient.BaseAddress = addApiVersionNumberSafe( alpacaRestApi ?? new Uri("https://api.alpaca.markets"), apiVersion); _alpacaDataClient.DefaultRequestHeaders.Accept .Add(new MediaTypeWithQualityHeaderValue("application/json")); _alpacaDataClient.BaseAddress = addApiVersionNumberSafe( alpacaDataApi ?? new Uri("https://data.alpaca.markets"), dataApiVersion); _polygonApiKey = keyId; _polygonHttpClient.DefaultRequestHeaders.Accept .Add(new MediaTypeWithQualityHeaderValue("application/json")); _polygonHttpClient.BaseAddress = polygonRestApi ?? new Uri("https://api.polygon.io"); _isPolygonStaging = isStagingEnvironment || _alpacaHttpClient.BaseAddress.Host.Contains("staging"); #if NET45 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11; #endif }
/// <summary> /// Creates new instance of <see cref="RestClient"/> object. /// </summary> /// <param name="keyId">Application key identifier.</param> /// <param name="secretKey">Application secret key.</param> /// <param name="alpacaRestApi">Alpaca REST API endpoint URL.</param> /// <param name="polygonRestApi">Polygon REST API endpoint URL.</param> /// <param name="alpacaDataApi">Alpaca REST data API endpoint URL.</param> /// <param name="apiVersion">Version of Alpaca API to call. Valid values are "1" or "2".</param> /// <param name="dataApiVersion">Version of Alpaca data API to call. The only valid value is currently "1".</param> /// <param name="isStagingEnvironment">If <c>true</c> use staging.</param> /// <param name="throttleParameters">Parameters for requests throttling.</param> /// <param name="oauthKey">Key for alternative authentication via oauth. keyId and secretKey will be ignored if provided.</param> public RestClient( String keyId, String secretKey, Uri alpacaRestApi, Uri polygonRestApi, Uri alpacaDataApi, Int32 apiVersion, Int32 dataApiVersion, Boolean isStagingEnvironment, ThrottleParameters throttleParameters, String oauthKey) { keyId = keyId ?? throw new ArgumentException( "Application key id should not be null", nameof(keyId)); secretKey = secretKey ?? throw new ArgumentException( "Application secret key id should not be null", nameof(secretKey)); if (!_supportedApiVersions.Contains(apiVersion)) { throw new ArgumentException( "Supported REST API versions are '1' and '2' only", nameof(apiVersion)); } if (!_supportedDataApiVersions.Contains(dataApiVersion)) { throw new ArgumentException( "Supported Data REST API versions are '1' and '2' only", nameof(dataApiVersion)); } throttleParameters = throttleParameters ?? ThrottleParameters.Default; _alpacaRestApiThrottler = throttleParameters.GetThrottler(); if (string.IsNullOrEmpty(oauthKey)) { _alpacaHttpClient.DefaultRequestHeaders.Add( "APCA-API-KEY-ID", keyId); _alpacaHttpClient.DefaultRequestHeaders.Add( "APCA-API-SECRET-KEY", secretKey); } else { _alpacaHttpClient.DefaultRequestHeaders.Add( "Authorization", "Bearer " + oauthKey); } _alpacaHttpClient.DefaultRequestHeaders.Accept .Add(new MediaTypeWithQualityHeaderValue("application/json")); _alpacaHttpClient.BaseAddress = addApiVersionNumberSafe( alpacaRestApi ?? new Uri("https://api.alpaca.markets"), apiVersion); _alpacaDataClient.DefaultRequestHeaders.Accept .Add(new MediaTypeWithQualityHeaderValue("application/json")); _alpacaDataClient.BaseAddress = addApiVersionNumberSafe( alpacaDataApi ?? new Uri("https://data.alpaca.markets"), dataApiVersion); _polygonApiKey = keyId; _polygonHttpClient.DefaultRequestHeaders.Accept .Add(new MediaTypeWithQualityHeaderValue("application/json")); _polygonHttpClient.BaseAddress = polygonRestApi ?? new Uri("https://api.polygon.io"); _isPolygonStaging = isStagingEnvironment || _alpacaHttpClient.BaseAddress.Host.Contains("staging"); #if NET45 System.Net.ServicePointManager.SecurityProtocol = #pragma warning disable CA5364 // Do Not Use Deprecated Security Protocols System.Net.SecurityProtocolType.Tls12 | System.Net.SecurityProtocolType.Tls11; #pragma warning restore CA5364 // Do Not Use Deprecated Security Protocols #endif }