diff --git a/README.md b/README.md index 3ef56cad..33035ec3 100644 --- a/README.md +++ b/README.md @@ -82,11 +82,9 @@ Any support is greatly appreciated. When creating an account on new exchanges please consider using a referral link from above. ### Donate -Make a one time donation in a crypto currency of your choice. If you prefer to donate a currency not listed here please contact me. - -**Btc**: bc1q277a5n54s2l2mzlu778ef7lpkwhjhyvghuv8qf -**Eth**: 0xcb1b63aCF9fef2755eBf4a0506250074496Ad5b7 -**USDT (TRX)** TKigKeJPXZYyMVDgMyXxMf17MWYia92Rjd +Make a one time donation in a crypto currency of your choice. If you prefer to donate in a different currency or network send me a message. + +**USDT (TRX)** TKigKeJPXZYyMVDgMyXxMf17MWYia92Rjd ### Sponsor Alternatively, sponsor me on Github using [Github Sponsors](https://github.com/sponsors/JKorf). @@ -228,1189 +226,3 @@ Various: * Added SupportedEnvironments property to PlatformInfo * Updated SymbolOrderBook DoResyncAsync to return CallResult instead of CallResult which was redundant * Various small performance improvements - -* Version 11.2.2 - 08 Jun 2026 - * Fixed timing issue causing websocket connection to possible loop in error state - -* Version 11.2.1 - 02 Jun 2026 - * Fixed some testing logic - -* Version 11.2.0 - 26 May 2026 - * Added RateLimitGroup client option to allow for specifying different rate limiting groups - * Added request parameter checking in RestRequestValidator - * Improved EnumConverter initialization performance - * Fixed timing issue in SymbolOrderBook stopping - -* Version 11.1.1 - 10 Apr 2026 - * Added Reset functionality to rate limiter implementation - * Added reset of rate limit per connection when connection is disconnected - -* Version 11.1.0 - 09 Apr 2026 - * Updated WebSocket message routing improving performance for scenarios with multiple different subscriptions and topics - * Added AddCommaSeparated helper for Enum value arrays to ParameterCollection - * Added SharedRestRequestValidator for testing Shared interface implementations - * Improved EnumConverter performance and removed string allocation for happy path - * Fixed concurrency issue when using rate limit guard for multiple gates - * Fixed CreateParamString extension method for ArrayParametersSerialization.Json - * Fixed Shared GetOrderBookOptions and GetRecentTradeOptions base validations not being called - * Fixed CallResult returning success result in AsDataless even if Error is set - -* Version 11.0.3 - 30 Mar 2026 - * Updated Enum converter to only warn once per type for null/empty value for non-nullable enum property - -* Version 11.0.2 - 26 Mar 2026 - * Updated SetOptions logic to allow calling on client without credentials - -* Version 11.0.1 - 24 Mar 2026 - * Fixed CreateParamString method for arrays of value types - -* Version 11.0.0 - 23 Mar 2026 - * Updated API credential logic, exchange implementation are expected to provide their own credentials implementation with ApiCredentials as base class - * Removed ApiCredentials implementation used by most exchanges - * Removed ApiCredentialsType Enum - * Added CredentialSet base class and implementations for defining different API credentials - * Added optional type param to AuthenticationProvider for the specific API credential type to improve type safety - * Moved AuthenticationProvider/ApiCredentials from BaseApiClient to RestApiClient/SocketApiClient base classes - * Added optional type params to RestApiClient/SocketApiClient base class to specify the AuthenticationProvider type and credentials type to improve type safety - * Moved SetOptions/SetApiCredentials from BaseApiClient to RestApiClient/SocketApiClient - * Extracted LibraryOptions without TApiCredentials for libraries without API credentials - * Removed ApiCredentials from ApiOptions, credentials can only be configured at library, rest or socket level - * Added EnvironmentName property to RestApiClient/SocketApiClient - * Added Unknown enum value to Shared interfaces SharedOrderStatus, SharedTransferStatus and SharedTriggerOrderStatus enums - * Updated Enum converter to map value to an undefined Enum value instead of the first Enum value - * Added support for checking for missing fields on RestIntegrationTest - * Added Web3 signing utilities - * Added BytesToHexString and HexToBytesString to ExchangeHelpers static class - * Fixed bug where WebSocket connections are not reconnected when configuring Proxy with SetUpdates - * Removed legacy CryptoBaseClient, CryptoRestClient and CryptoSocketClient - -* Version 10.8.0 - 06 Mar 2026 - * Added `RequestBodyContentEncoding` and `OmitContentTypeHeaderWithoutContent` config to RestApiClient - * Added `ForcePathEndWithSlash` setting to RequestDefinition - * Added `encoding` parameter to SetContent on REST Request - -* Version 10.7.2 - 02 Mar 2026 - * Added small overlap in UserDataTracker polling logic to account for API endpoints not immediately having the data available - -* Version 10.7.1 - 25 Feb 2026 - * Fixed deadlock scenario in websocket connection when subscribe and handling message concurrently - -* Version 10.7.0 - 24 Feb 2026 - * Added parsing of REST response data up to 128 characters for error responses - * Added check for invalid json in JsonSocketMessageHandler - * Added virtual GetTypeIdentifierNonJson for handling non-json messages in JsonSocketMessageHandler - * Added additional options to Rest client options for configuring HttpClient - * Updated INextPageToken parameter on Shared interfaces to PageRequest type, functionality unchanged - * Added SupportsAscending and SupportsDescending properties to PaginatedEndpointOptions to expose supported data directions - * Added MaxAge property to PaginatedEndpointOptions to expose the max age of data that can be requested - * Added Direction property to Shared interfaces paginated requests to configure pagination data direction - * Removed PaginationSupport property from PaginatedEndpointOptions, replaced by above new properties - * Updated Shared GetTradeHistoryRequest EndTime property to be optional - * Updated I(Futures/Spot)OrderRestClient.GetClosed(Futures/Spot)OrdersOptions from PaginatedEndpointOptions to GetClosedOrdersOptions - * Updated I(Futures/Spot)OrderRestClient.Get(Futures/Spot)UserTradesOptions from PaginatedEndpointOptions to GetUserTradesOptions - * Updated rate limiting PathStartFilter to ignore added or missing slash before the path - * Updated internal lock for subscription to ReaderWriterLockSlim on SocketConnection - * Removed check for OnlyTrackProvidedSymbols in combination with empty TrackedSymbols list - * Fixed KlineTracker throwing exception if there is no data in the initial snapshot - -* Version 10.6.2 - 17 Feb 2026 - * Fix for websocket queries which don't expects response getting stuck in subscribing state - -* Version 10.6.1 - 16 Feb 2026 - * Fixed exception when stopping SymbolOrderBook instance when update is received while closing - -* Version 10.6.0 - 16 Feb 2026 - * Updated symbol tracking logic on UserDataTracker, now is per UserDataTracker instead of per topic - * Added check for startTime filter for polling being to close to current time which can cause issues if time isn't in sync with server - * Added AddTrackedSymbolsAsync and RemoveTrackedSymbolAsync methods to UserDataTracker - * Added check SymbolOrderBook is still alive when trying to add updates to prevent unnoticed growing in the background when subscription isn't closed while book is - -* Version 10.5.4 - 12 Feb 2026 - * Fixed type check ExchangeParameters GetValue - * Fixed bug in polling time filter for UserDataTracker item - -* Version 10.5.3 - 11 Feb 2026 - * Fixed orders getting incorrectly set to canceled state for UserDataTracker spot and futures orders - * Added check EnumConverter to detect undefined int value parsing - -* Version 10.5.2 - 10 Feb 2026 - * Added check for subscribe queries with TimeoutBehavior.Success to complete when subscription has received update - * Added call to ApiClient.HandleUnhandledMessage when no websocket message processor is found based on topic to allow additional processing - * Combined websocket connection subscribe and re-subscribe logic - * Set websocket query completed after setting Result - -* Version 10.5.1 - 10 Feb 2026 - * Fixed trading mode selection for futures listen key methods in FuturesUserDataTracker - -* Version 10.5.0 - 10 Feb 2026 - * Added keep alive for listenkeys to UserDataTracker - * Updated logging unmatched websocket message - * Updated websocket message forwarding logic - * Fixed bug in IncomingKbps calculation - * Fixed bug in SendAsync in SocketConnection - * Fixed bug in UserDataTracker orders logic incorrectly setting order to canceled status - -* Version 10.4.1 - 06 Feb 2026 - * Updated UserDataTracker to only track symbol when position size > 0 - * Update UserDataTracker log verbosity - -* Version 10.4.0 - 06 Feb 2026 - * Added user data tracking logic - * Added LastReceiveTime, SocketStatus and SubscriptionStatus properties to UpdateSubscription - * Added SharedTransferStatus Enum and property to SharedDeposit - * Added PositionMode property to SharedPosition model - * Added IsZero property to SharedQuantity - * Added additional methods for requesting supported symbols to Shared ISpotSymbolRestClient/IFuturesSymbolRestClient interfaces - * Added Disposed property on BaseClient and IRestClient/ISocketClient interfaces - * Added AutoTimestamp option for socket client - * Renamed IWebSocket LastActionTime to LastReceiveTime - * Refactored AsyncResetEvent implementation - * Updated CryptoExchangeWebsocketClient LastReceiveTime logic - * Updated Subscription status change event handler to run sync instead of separate task - * Updated Interval property access on KlineTracker to public - * Fixed socket client timestamp offset bug - -* Version 10.3.1 - 27 Jan 2026 - * Fixed potential collection modified exception upon logging message not handled in websocket message handling - -* Version 10.3.0 - 22 Jan 2026 - * Added PlatformInfo class for specifying platform metadata - * Added better handling for enabling AutoTimestamp in client options when not implemented in the API - * Fixed state handling for subscriptions where queries do not get a response - * Fixed HandleSubQueryResponse not getting called - * Removed legacy websocket message handling and the corresponding UseUpdatedDeserialization client option - -* Version 10.2.5 - 19 Jan 2026 - * Updated SymbolOrderBook.WaitUntilFirstUpdateBufferedAsync - * Added GetRestOffsets and GetWebsocketOffsets to TimeOffsetManager - -* Version 10.2.4 - 17 Jan 2026 - * Added WaitUntilFirstUpdateBufferedAsync method on SymbolOrderBook - * Added some util methods - * Added CommaSplitStringConverter - * Fixed sequence validation bug SymbolOrderBook - -* Version 10.2.3 - 14 Jan 2026 - * Added HandleUnhandledMessage virtual method to SocketApiClient to allow some processing for messages which couldn't be mapped via the normal way - * Fixed semaphore exception when creating a new REST client while time sync is in progress on another client - -* Version 10.2.2 - 13 Jan 2026 - * Allow the same websocket connection sequence number to be recorded multiple times - -* Version 10.2.1 - 13 Jan 2026 - * Removed duplicate logging for rest responses in Trace verbosity - * Fixed parameter URL creation for array values with ArrayParametersSerialization.MultipleValues - -* Version 10.2.0 - 12 Jan 2026 - * Added EnforceSequenceNumbers property on SocketApiClient to configure whether websocket message contain sequence numbers and if these should be checked to be sequential - * Added fallback to existing websocket connection if no dedicated request connection was found - * Added IntBoolConverter base class for arbitrary int value to bool mapping - * Added SequenceNumber property to DataEvent object - * Added _skipSequenceCheckFirstUpdateAfterSnapshotSet property for SymbolOrderBook implementations - * Updated SymbolOrderBook sequenceNumber validation - * Updated SymbolOrderBook log verbosities - * Renamed SetInitialOrderBook to SetSnapshot in SymbolOrderBook - * Renamed updateId references to sequenceNumber in SymbolOrderBook - -* Version 10.1.0 - 07 Jan 2026 - * Updated time sync / time offset management for REST API's - * Added time offset tracking for WebSocket API's - * Added GetAuthenticationQuery virtual method on AuthenticationProvider - * Updated AuthenticationProvider GetTimestamp methods to include a one second offset by default - * Added AuthenticationProvider GetTimestamp methods for SocketApiClient instances - * Added ClientName property on BaseApiClient, resolving to the type name - * Added ObjectOrArrayConverter JsonConverterFactory implementation for resolving json data which might be returned as object or array - * Added UpdateServerTime, UpdateLocalTime and DataAge properties to (I)SymbolOrderBook - * Added OutputToConsoleAsync method to (I)SymbolOrderBook - * Updated SymbolOrderBook string representation - * Added DataTimeLocal and DataAge properties to DataEvent object - * Added SocketConnection parameter to subscription HandleSubQueryResponse and HandleUnsubQueryResponse methods - * Added some utility methods - -* Version 10.0.2 - 19 Dec 2025 - * Fixed duplicate subscription check with updated deserialization - * Added exception handlers for REST response processing - -* Version 10.0.1 - 18 Dec 2025 - * Fixed query array parameter serialization - -* Version 10.0.0 - 16 Dec 2025 - * - - -* Version 9.13.0 - 10 Nov 2025 - * Added SharedTickerType for defining time used for ticker calculations by the API - * Added SharedSymbolModel base class to SharedFuturesKline, SharedKline, SharedTrade models - * Added IExchangeService interface - * Fixed incorrect exchange name in static logger when using multiple libraries - -* Version 9.12.0 - 03 Nov 2025 - * Added constant for selecting a supported USD asset for use in a Shared API/SharedSymbol - * Added AliasType to specify only one way conversion for AssetAliases - * Removed some unhelpful verbose logs - -* Version 9.11.0 - 30 Oct 2025 - * Added StaticLogger to LibraryHelpers, updated warning logging for converters to use StaticLogger - * Added client reference helper to LibraryHelpers - * Fixed exception when initial trade snapshot has no items in TradeTracker - -* Version 9.10.0 - 15 Oct 2025 - * Added ITransferRestClient Shared interface - * Added ClientOrderId property to SharedUserTrade model - * Updated IBalanceRestClient, GetBalancesRequest now mainly works with SharedAccountType type, allowing more options - * Updated IBalanceRestClient, GetBalanceOptions now specifies supported account types - * Updated DateTimeConverter to work primarily with decimal instead of double to prevent some floating point issues - -* Version 9.9.0 - 06 Oct 2025 - * Updated socket Subscription status handling - * Added SubscriptionStatusChanged event to UpdateSubscription (SubscribeAsync methods reponse) - * Fixed timing issue for connection events in UpdateSubscription - -* Version 9.8.0 - 30 Sep 2025 - * Added ContractAddress to SharedAsset model - * Added ITrackerFactory interface - * Fixed UpdateSubscription still propagating connection events even though the specific listener is unsubscribed - * Fixed ExchangeHelpers.AdjustValueStep high precision calculation - * Fixed issue increasing the number of websocket connections increasing when sending a query when a previous connection was attempting to reconnect - * Fixed EnumConverter to allow mapping empty string values - -* Version 9.7.0 - 01 Sep 2025 - * Added LibraryHelpers.CreateHttpClientMessageHandle to standardize HttpMessageHandler creation - * Added REST client option for selecting HTTP protocol version - * Added REST client option for HTTP client keep alive interval - * Added HttpVersion to WebCallResult responses - * Updated request logic to default to using HTTP version 2.0 for dotnet core - -* Version 9.6.0 - 25 Aug 2025 - * Added support for parsing REST response even though status indicates error - * Added better support for subscriptions without subscribe confirmation - * Added check in websocket for receiving 401 unauthorized http response status when 101 was expected - * Removed obsolete attribute on Error.Code property, updated the description - -* Version 9.5.0 - 19 Aug 2025 - * Added better error handling support - * Added ErrorDescription, ErrorType and IsTransient to Error object - * Added ErrorCode in favor of Code - * Updated some error messages - * Refactored RestApiClient request authentication and AuthenticationProvider to prevent duplicate query string / body serialization - * Fixed IOrderBookSocketClient Shared interface not getting registered in DI - * Fixed response type in websocket queries not interested in the response - * Fixed timing issue in query response processing - -* Version 9.4.0 - 04 Aug 2025 - * Updated Shared symbol requests/subscriptions to allow multiple symbols in one call if supported - -* Version 9.3.1 - 29 Jul 2025 - * Added BaseAndQuoteAssetAndContracts value to SharedQuantityType enum - * Added Id property to SharedPosition model - -* Version 9.3.0 - 23 Jul 2025 - * Updated websocket message to listener matching logic to be more flexible - * Updated decimal parser to support "NaN" and "-Infinity" strings, added check for negative overflow value, improved performance in most cases - -* Version 9.2.1 - 16 Jul 2025 - * Added setting for whether or not to process unparsable websocket messages - * Fixed issue causing duplicate subscriptions and data in the TradeTracker and KlineTracker when websocket connection was reconnected - -* Version 9.2.0 - 14 Jul 2025 - * Added support for sending byte data on websocket - * Added support for handling both string and byte data with different IMessageAccessor types - * Split IMessageSerializer into IByteMessageSerializer and IStringMessageSerializer - * Renamed IMessageAccessor.IsJson to IsValid - * Refactored ArrayConverter to remove separate converter options cache - -* Version 9.1.0 - 28 May 2025 - * Added JsonConverter implementation for SharedQuantity and SharedSymbol types, making usage of the types easier - * Updated dotnet dependency packages from 9.0.0 to 9.0.5 - * Replaced Microsoft.Extensions.Logging.Abstractions with Microsoft.Extensions.Logging - * Replaced Microsoft.Extensions.Options.ConfigurationExtensions with Microsoft.Extensions.Configuration.Binder, which includes a source generator for AOT publishing - * Removed redundant Microsoft.Extensions.DependencyInjection.Abstractions package reference - -* Version 9.0.1 - 20 May 2025 - * Improved response time on CancellationToken cancel during subscribing - * Added support for sending query without expecting a response - -* Version 9.0.0 - 13 May 2025 - * Added support for Native AOT compilation - * Updated all IEnumerable response types to array response types - * Added Pass support for ApiCredentials, removing the need for most implementations to add their own ApiCredentials type - * Added KeepAliveTimeout setting setting ping frame timeouts for SocketApiClient - * Added IBookTickerRestClient Shared interface for requesting book tickers - * Added ISpotTriggerOrderRestClient Shared interface for managing spot trigger orders - * Added ISpotOrderClientIdClient Shared interface for managing spot orders by client order id - * Added IFuturesTriggerOrderRestClient Shared interface for managing futures trigger orders - * Added IFuturesOrderClientIdClient Shared interface for managing futures orders by client order id - * Added IFuturesTpSlRestClient Shared interface for setting TP/SL on open futures positions - * Added GenerateClientOrderId to ISpotOrderRestClient and IFuturesOrderRestClient interface - * Added OptionalExchangeParameters and Supported properties to EndpointOptions - * Refactor Shared interfaces quantity parameters and properties to use SharedQuantity - * Added SharedSymbol property to Shared interface models returning a symbol - * Added TriggerPrice, IsTriggerOrder, TakeProfitPrice, StopLossPrice and IsCloseOrder to SharedFuturesOrder response model - * Added MaxShortLeverage and MaxLongLeverage to SharedFuturesSymbol response model - * Added StopLossPrice and TakeProfitPrice to SharedPosition response model - * Added TriggerPrice and IsTriggerOrder to SharedSpotOrder response model - * Added QuoteVolume property to SharedSpotTicker response model - * Added AssetAlias configuration models - * Added static ExchangeSymbolCache for tracking symbol information from exchanges - * Added static CallResult.SuccessResult to be used instead of constructing success CallResult instance - * Added static ApplyRules, RandomHexString and RandomLong helper methods to ExchangeHelpers class - * Added AsErrorWithData To CallResult - * Added OriginalData property to CallResult - * Added support for adjusting the rate limit key per call, allowing for ratelimiting depending on request parameters - * Added implementation for integration testing ISymbolOrderBook instances - * Added implementation for integration testing socket subscriptions - * Added implementation for testing socket queries - * Updated request cancellation logging to Debug level - * Updated logging SourceContext to include the client type - * Updated some logging logic, errors no longer contain any data, exception are not logged as string but instead forwarded to structured logging - * Fixed warning for Enum parsing throwing exception and output warnings for each object in a response to only once to prevent slowing down execution - * Fixed memory leak in AsyncAutoRestEvent - * Fixed logging for ping frame timeout - * Fixed warning getting logged when user stops SymbolOrderBook instance - * Fixed socket client `UnsubscribeAll` not unsubscribing dedicated connections - * Fixed memory leak in Rest client cache - * Fixed integers bigger than int16 not getting correctly parsed to enums - * Fixed issue where the default options were overridden when using SetApiCredentials - * Removed Newtonsoft.Json dependency - * Removed legacy Rest client code - * Removed legacy ISpotClient and IFuturesClient support - -* Version 9.0.0-beta7 - 06 May 2025 - * Added AssetAlias configuration classes - * Added Exception property on Error objects - * Updated logging to no longer log full stacktraces but instead pass exceptions to struct - * Removed the Data property from Error objects (is already available on CallResult)ured logging - * Updated ArrayConverter _typeAttributesCache from ConcurrentDictionary to lazy list since each type has it's own ArrayConverter instance now - * Updated SocketApiClient to create RateLimiter instance if none is provided - * Fixed issue with ArrayConverter creating seperate JsonSerializerContext instance for each type by adding JsonSerializerContextCache - -* Version 9.0.0-beta6 - 03 May 2025 - * Fixed initial asset info in ExchangeSymbolCache not getting cached in uppercase - * Fixed ArrayConverter creating new JsonSerializerContext for each default json deserialization - -* Version 9.0.0-beta5 - 30 Apr 2025 - * Add support for specifying additional custom converters when creating JsonSerializerOptions - * Fix issue overriding default options when using SetApiCredentials on client - -* Version 9.0.0-beta4 - 28 Apr 2025 - * Support reading of int32 (up from int16) as enum values in EnumConverter - -* Version 9.0.0-beta3 - 27 Apr 2025 - * Fixed memory leak in cache - * Fixed memory leak in array converter - * Fixed incorrect log verbosity for log message when stopping order book - -* Version 9.0.0-beta2 - 23 Apr 2025 - * Added QuoteVolume property to SharedSpotTicker model - * Map asset names as uppercase in ExchangeSymbolCache - * Renamed ISpotOrderClientIdClient to ISpotOrderClientIdRestClient and IFuturesOrderClientIdClient to IFuturesOrderClientIdRestClient - -* Version 9.0.0-beta1 - 16 Apr 2025 - * Added support for Native AOT compilation - * Updated all IEnumerable response types to array response types - * Added Pass support for ApiCredentials, removing the need for most implementations to add their own ApiCredentials type - * Added KeepAliveTimeout setting setting ping frame timeouts for SocketApiClient - * Added IBookTickerRestClient Shared interface for requesting book tickers - * Added ISpotTriggerOrderRestClient Shared interface for managing spot trigger orders - * Added ISpotOrderClientIdClient Shared interface for managing spot orders by client order id - * Added IFuturesTriggerOrderRestClient Shared interface for managing futures trigger orders - * Added IFuturesOrderClientIdClient Shared interface for managing futures orders by client order id - * Added IFuturesTpSlRestClient Shared interface for setting TP/SL on open futures positions - * Added GenerateClientOrderId to ISpotOrderRestClient and IFuturesOrderRestClient interface - * Added OptionalExchangeParameters and Supported properties to EndpointOptions - * Refactor Shared interfaces quantity parameters and properties to use SharedQuantity - * Added SharedSymbol property to Shared interface models returning a symbol - * Added TriggerPrice, IsTriggerOrder, TakeProfitPrice, StopLossPrice and IsCloseOrder to SharedFuturesOrder response model - * Added MaxShortLeverage and MaxLongLeverage to SharedFuturesSymbol response model - * Added StopLossPrice and TakeProfitPrice to SharedPosition response model - * Added TriggerPrice and IsTriggerOrder to SharedSpotOrder response model - * Added static ExchangeSymbolCache for tracking symbol information from exchanges - * Added static CallResult.SuccessResult to be used instead of constructing success CallResult instance - * Added static ApplyRules, RandomHexString and RandomLong helper methods to ExchangeHelpers class - * Added AsErrorWithData To CallResult - * Added OriginalData property to CallResult - * Added support for adjusting the rate limit key per call, allowing for ratelimiting depending on request parameters - * Added implementation for integration testing ISymbolOrderBook instances - * Added implementation for integration testing socket subscriptions - * Added implementation for testing socket queries - * Updated request cancellation logging to Debug level - * Fixed memory leak in AsyncAutoRestEvent - * Fixed logging for ping frame timeout - * Fixed socket client `UnsubscribeAll` not unsubscribing dedicated connections - * Removed Newtonsoft.Json dependency - * Removed legacy Rest client code - * Removed legacy ISpotClient and IFuturesClient support - -* Version 8.8.0 - 10 Feb 2025 - * Split DataEvent.Timestamp in DataEvent.ReceivedTime and DataEvent.DataTime - * Added SharedKlineInterval enum values - * Fixed some typos - -* Version 8.7.4 - 08 Feb 2025 - * Fixed exception when creating rest client for mono runtime - -* Version 8.7.3 - 05 Feb 2025 - * Added handling of negative number DateTime deserialization to default - * Updated SharedSymbol from class to record - * Fixed issue with serialization of nullable types in System.Text.Json ArrayConverter - * Fix for unnecessary error message in logging when closing websocket connection - -* Version 8.7.2 - 27 Jan 2025 - * Some small fixes in the System.Text.Json ArrayConverter - * Added support for Flags enum deserialization in System.Text.Json EnumConverter - -* Version 8.7.1 - 24 Jan 2025 - * Added Authenticated property to IBaseApiClient interface to check if a client was provided API credentials - -* Version 8.7.0 - 21 Jan 2025 - * Added GetMillisecondTimestampLong helper method to AuthenticationProvider - * Added PriceSignificationFigures to SharedSpotSymbol model - -* Version 8.6.1 - 09 Jan 2025 - * Fixed websocket connection getting stuck after a ping frame timeout - * Removed websocket Error callback when exception is expected - * Removed unnecessary type restraints on RestApiClient.SendAsync methods - -* Version 8.6.0 - 07 Jan 2025 - * Added support for passing weight to apply to an individual ratelimit guard - * Added IFeeRestClient to service registration - * Added response headers parameter to RestApiClient.TryParseError method - * Added check for ServerRateLimitError on RestApiClient.TryParseError response - * Added ExchangeType Enum - * Some small improvements - -* Version 8.5.0 - 23 Dec 2024 - * Added SetOptions method to update client settings - * Added SocketConnection parameter to PeriodicQuery callback - * Added setting of DefaultProxyCredentials on HttpClient instance when client is not provided by DI - * Added support for overriding request timeout per request - * Added build target for net9.0 - * Added setting of KeepAliveTimeout on websocket connections to improve dropped connection detection - * Changed max wait time for close handshake response from 5 seconds to 1 second - * Fixed exception in trade tracker when there is no data in the initial snapshot - -* Version 8.4.5 - 20 Dec 2024 - * Added EmptyArrayObjectConverter System.Text.Json JsonConverter - * Added JsonSerializerOptions parameter to SystemTextJsonMessageAccessor constructor - -* Version 8.4.4 - 08 Dec 2024 - * Changed JsonConverterCtorAttribute to use constructor type parameter instead of generic type parameter to support .net framework - -* Version 8.4.3 - 03 Dec 2024 - * Fixed KlineTracker update handling - -* Version 8.4.2 - 02 Dec 2024 - * Removed special characters in ClientOrderIdSeperator to adhere to field content rules - -* Version 8.4.1 - 02 Dec 2024 - * Added JsonConverterCtorAttribute to allow specifying a custom JsonConverter with constructor parameters on properties - * Added ReplaceConverter System.Text.Json converter - * Added LibraryHelpers class for internal helper methods - -* Version 8.4.0 - 28 Nov 2024 - * Added GetFeesAsync Shared REST client support - * Added LibraryOptions base class - * Added CommaSplitEnumConverter System.Text.Json converter - * Added TimePeriodFilterSupport and MaxLimit properties to PaginatedEndpointOptions - * Updated package dependency versions - -* Version 8.3.0 - 19 Nov 2024 - * Added support for IOptions injection, allowing options to be read from IConfiguration - * Added handling of Infinity values in decimal converter - * Added rate limit update event - * Small refactor on client options internals - * Fixed concurrency issue when unsubscribing websocket subscription during reconnection - -* Version 8.2.0 - 06 Nov 2024 - * Added support for not allowing duplicate subscription topics on the same websocket connection - * Added PerAccount SharedLeverageSettingMode enum value, changed Side on SharedUserTrade to nullable - * Added support for object deserialization in SystemTextJsonMessageAccessor.GetValue - * Changed SocketApiClient GetAuthenticationRequest to GetAuthenticationRequestAsync to allow for requesting token - -* Version 8.1.1 - 01 Nov 2024 - * Fixed socket connections trying to authenticated connection when it's marked as dedicated request connection even when no authentication is needed - * Fixed System.Text.Json ArrayConverter not passing serializer options to nested deserialization - * Fixed System.Text.Json ArrayConverter creating new serializer options each time a JsonConverter attribute is encountered - -* Version 8.1.0 - 28 Oct 2024 - * Added KlineTracker and TradeTracker implementation - * Added Side to SharedTrade model - * Added overload for Create method in OrderBookFactory using SharedSymbol - * Added ValidateMessage method to websocket Query object to filter messages even though it is matched to the query based on the ListenIdentifier - * Added DoHandleReset method for websocket subscriptions - * Added ConnectionId to RequestDefinition to correctly handle connection and path rate limiting configuration - * Added System.Text.Json ArrayConverter Write implementation - * Updated SharedFuturesTicker LastPrice, HighPrice and LowPrice properties to be nullable - * Updated SetApiCredentials method to also updated the credentials on the client specific options to prevent unknown client credentials in some situations - -* Version 8.0.3 - 14 Oct 2024 - * Added support for duplicate array indexes in System.Text.Json ArrayConverter - * Added fallback for unparsable value in System.Text.Json NumberStringConverter - * Added Authenticated property on base client and shared client - * Added GetValues System.Text.Json implementation in message accessor - -* Version 8.0.2 - 09 Oct 2024 - * Updated dependency versions, including System.Text.Json from 8.0.4 to 8.0.5 containing a vulnerability fix - -* Version 8.0.1 - 07 Oct 2024 - * Added cached library version properties on base client - * Added support for derserializing 0001-01-01 as datetime null value - * Added ToRfc3339String extension method for DateTime type - -* Version 8.0.0 - 27 Sep 2024 - * Added new cross exchange interfaces implementation - * Supports REST, WebSocket, Spot and Futures API's - * Added various client interfaces for specific functionality - * Added SharedSymbol type, taking care of symbol formatting for different exchanges - * Added dynamic pagination support for shared functionality - * Added various shared Enum definitions - * Added ExchangeWebResult and ExchangeEvent, exchange specific versions of WebCallResult and DataEvent - * See https://jkorf.github.io/CryptoExchange.Net/index.html#idocs_shared for more info - * Added tradingMode and deliverData parameters to BaseApiClient FormatSymbol method - * Added ExecutePages method to ExchangeHelpers static class - * Added ApplySymbolRules method to ExchangeHelpers static class - * Added ResubscribingFailed event for websocket connections - * Added handling of http result 429 (ratelimited) during websocket connection - * Added Websocket dispose before creating new connection when reconnecting - * Updated Sourcelink package version - * Marked ISpotClient and IFuturesClient references as deprecated - - -* Version 7.11.2 - 28 Aug 2024 - * Fixed issues when ratelimiting is canceled using the provided cancellation token - -* Version 7.11.1 - 25 Aug 2024 - * Improved closing logic websockets - -* Version 7.11.0 - 07 Aug 2024 - * Added ParseString static method on EnumConverter for parsing strings manually - * Added support for decimal values in System.Text.Json NumberStringConverter - * Added support for `null` string values in System.Text.Json DecimalConverter - * Added support for number deserialization when requesting string in System.Text.Json MessageAccessor.GetValue - * Added deserialization handling of json values too big to fit decimal value - * Decreased some memory allocations during rest request authentication - * Fixed subscriptions trying to send unsubscribe request when the socket connection will be closed anyway - * Removed SecureString usage in credentials; it's not recommended to be used - * Removed some extension methods no longer relevant - * Improved testing checks - -* Version 7.10.0 - 26 Jul 2024 - * Added System.Text.Json NumberStringConverter - * Added integration testing base class - * Added AddSecondsString and AddOptionalSecondsString to ParameterCollection - * Added Decompress method for ReadOnlyMemory using non-GZip deflate - * Added SocketConnection parameter to SocketConnection PreprocessStreamMessage - * Fixed websocket reconnect/unsubscribe timing bug - * Fixed issue in System.Text.Json array object deserialization skipping property when skipping an index - * Fixed order book logging bug - * Fixed bug in ParameterCollection AddEnumAsInt - -* Version 7.9.0 - 16 Jul 2024 - * Added some checks in websocket connection handling - * Added As and AsError methods on untyped WebCallResult - * Updated System.Text.Json package to version 8.0.4 to fix vulnerability - * Updated websocket subscription response handling to remove the thread blocking ManualResetEvent usage - * Updated static logging classes access modifier from internal to public so they can be called in overriden methods - * Updated some testing object implementations - * Fixed authentication error when reconnecting an unauthenticated connection which was marked as dedicated query connection - * Small improvements in SystemTextJsonMessageAccessor - * Fixed System.Text.Json ArrayConverter implementation nullable value types handling - -* Version 7.8.0 - 02 Jul 2024 - * Updated single endpoint limit configuration - * Added LongConverter for nullable longs - * Updated SystemTextJsonComparer logic - -* Version 7.7.3 - 26 Jun 2024 - * Fixed request ids not matching in logging - * Added nullable int converter for System.Text.Json - * Small fixes in tests - -* Version 7.7.2 - 25 Jun 2024 - * Fixed ratelimiting issue possibly creating negative delays - -* Version 7.7.1 - 23 Jun 2024 - * Fixes for caching implementation - -* Version 7.7.0 - 23 Jun 2024 - * Caching support - * Caching is supported for GET requests within a certain time frame - * Enable caching by setting CachingEnabled to true in the client options - * Added DataSource to CallResult object - * Dedicated websocket connection - * Added functionality for always having a connection open which can then be used for order operations - * This eliminates the initial connection time for the first request - * WebSocket connection can be prepared by calling PrepareConnectionsAsync on the Api client, for example `await binanceSocketClient.SpotApi.PrepareConnectionsAsync()`. This is only needed initially; it will be reconnected when connection is lost. - * Added CancellationToken support for websocket queries - * Added SocketConnection parameter to SocketApiClient.GetAuthenticationRequest method - * Added ObjectStringConverter base converter for deserializing nested json strings - * Fixed websocket issue with ratelimiting and reconnecting interaction - * Fixed rate limiting issue with sub-millisecond delays - * Fixed websocket connection will now close if authentication fails because of not set credentials - * Updated websocket reconnection handling and options, added backoff policy - * Removed check for confirmed subscription as data often is pushed before the subscription is confirmed - -* Version 7.6.0 - 11 Jun 2024 - * Added support for specifying seperate uri and body parameters - * Added support for different message and handling generic types on socket queries - * Added support for PATCH http method requests - * Added support for setting http request body to a specific type directly - * Split DataEvent.Topic into StreamId and Symbol properties - * Added support for negative time values parsing - * Added some helper methods for converting DataEvent to CallResult - * Added support for GZip/Deflate automatic decompressing in the default HttpClient - * Updated some testing methods - -* Version 7.5.2 - 07 May 2024 - * Fixed SetApiCredentials not correctly being used by rate limiter causing exception - -* Version 7.5.1 - 03 May 2024 - * Some small improvements in unit testing components - -* Version 7.5.0 - 01 May 2024 - * Added testing implementations - * Small refactor AuthenticationProvider to allow better testing - * Change result of MessageAccessor.Read methods to CallResult so error can be returned - * Moved some DateTimeConverter logic to seperate methods to allow access from outside converters - -* Version 7.4.0 - 28 Apr 2024 - * Added FormatSymbol on IBaseApiClient interface - * Added IOrderBookFactory interface - * Removed ExchangeOptions as base class for OrderBookOptions - -* Version 7.3.3 - 23 Apr 2024 - * Added support for new DateTime format parsing - * Updated some logging - * Fixed concurrency issue in rest request sending - -* Version 7.3.2 - 19 Apr 2024 - * Fix for endpoint specific rate limiting throwing exception - -* Version 7.3.1 - 18 Apr 2024 - * Fixed websocket system subscriptions getting marked as unconfirmed when reconnecting - -* Version 7.3.0 - 17 Apr 2024 - * Added new method for sending Rest requests which splits the static and dynamic parameters - * Refactored rate limiting implementation - * Ratelimiters now statically applied for all clients - * Added support for different rate limit window types - * Added modular configuration of rate limits - * Added rate limit check when creating websocket connections - * Added automatic handling and retry for Retry-After responses - * Added configuration for setting ratelimit for each individual endpoint - * Added event for when rate limit is triggered - * Added SocketClient GetSocketApiClientStates method - -* Version 7.2.1 - 05 Apr 2024 - * Improved websocket reconnect logic - * Simplified SystemTextJsonMessageAccessor value retrieval - * Fixed System.Text.Json BoolConverter value writing - -* Version 7.2.0 - 24 Mar 2024 - * Added ArrayParametersSerialization.JsonArray support - * Refactored to high-performance logging for hot paths - * Updated SymbolOrderBook to use LoggerFactory - * Performance improvements - * Small bug fixes - * Updated logging - -* Version 7.1.0 - 16 Mar 2024 - * Added initial System.Text.Json deserialization support - * Added support for setting MessageSendSizeLimit for websocket clients to limit message size - * Added Exchange name property to IRestClient and ISocketClient interface - * Abstracted out rest client deserialization so different (de)serializers can be used - * Cleaned up rest client response handling - * Continued update of websocket message handling - * Use ReadonlyMemory to represent message data to prevent copying data multiple times - * Switched back to non-async websocket message handling to remove tasks overhead - * Updated package dependencies to latest versions - * Updated unit test package dependencies and updated tests accordingly - * Moved some properties used by the RestApiClient from the BaseApiClient - * Fixed issue with multiple concurrent subscribe calls in socket client - -* Version 7.0.0 - 24 Feb 2024 - * Full overhaul of Websocket message handling - * Abstracted out Newtonsoft.Json references in preparation of moving to System.Text.Json - * Updated SendPeriodic to operate on connection level instead of client level to prevent looping when there are no connections - * Added check to not send an unsubscribe message if there is another subscription listening to the same events - * Added CryptoRestClient and CryptoSocketClient as aggregate for accessing different exchange APIs - * Updated socket client log messages - * Updated socket client GetSubscriptionState output - -* Version 6.2.5 - 09 Jan 2024 - * Added support for deserializing null and empty string values to BoolConverter - -* Version 6.2.4 - 04 Jan 2024 - * Fixed parsing of DateTime value of zero with additional zero decimal places - -* Version 6.2.3 - 02 Dec 2023 - * Fixed requestBodyFormat parameter handling - -* Version 6.2.2 - 02 Dec 2023 - * Added support for specifying the request body content type on a per request basis - * Added DecimalStringWriterConverter - * Added RequestId to WebCallResult model - * Updated response logging - -* Version 6.2.1 - 28 Oct 2023 - * Utility methods - -* Version 6.2.0 - 24 Oct 2023 - * Added SerializerOptions helper class for setting a default serializer - * Added ParameterCollection helper class for easier parameter definition - * Added extra helper methods AuthenticationProvider - * Remove interface entries meant for internal use - * Added support for writing int values to the EnumConverter - -* Version 6.1.5 - 08 Oct 2023 - * Added UpdateType to socket DataEvent - * Added additional scenarios for BoolConverter - * Updated some logging - -* Version 6.1.4 - 23 Sep 2023 - * Added BoolConverter - * Added parameter for logging warning message on missing enum entry to EnumConverter - -* Version 6.1.3 - 18 Sep 2023 - * Fix for concurrency exception in socket subscription - -* Version 6.1.2 - 11 Sep 2023 - * Added support for multiple of the same ratelimiting type in the same rate limiter - * Fixed nullreference on rate limit error if no Retry-After header is returned - -* Version 6.1.1 - 04 Sep 2023 - * Fixes for json converters - -* Version 6.1.0 - 24 Aug 2023 - * Added support for ratelimiting on socket connections - * Added rest ratelimit handling and parsing - * Added ServerRatelimitError error - -* Version 6.0.3 - 23 Jul 2023 - * Fixed Proxy not getting applied in rest clients when not using DI - -* Version 6.0.2 - 05 Jul 2023 - * Added properties generic dictionary to SocketConnection - -* Version 6.0.1 - 29 Jun 2023 - * Added LogLevel optional parameter to TraceLoggerProvider - -* Version 6.0.0 - 25 Jun 2023 - * Updated ApiCredentials to support RSA signing as well as the default Hmac signature - * Removed custom logging implementation in favor of using `Microsoft.Extensions.Logging` ILogger directly - * Refactored client options for easier use - * Added easier way of switching environments - * Added ResponseLength and ToString() override on WebCallResult object - * Fixed memory leak in AsyncResetEvent - -* Version 5.4.3 - 14 Apr 2023 - * Fixed potential threading exception in socket connection - -* Version 5.4.2 - 01 Apr 2023 - * Reverted socket changes as it seems to cause reconnect to hang - -* Version 5.4.1 - 18 Mar 2023 - * Added CalculateTradableAmount to SymbolOrderBook - * Improved socket reconnect robustness - * Fixed api rate limiter not working correctly - -* Version 5.4.0 - 14 Feb 2023 - * Added unsubscribing when receiving subscribe answer after the request timeout has passed - * Fixed socket options copying - * Made TimeSync implementation optional - * Cleaned up ApiCredentials and added better support for extending ApiCredentials - -* Version 5.3.1 - 08 Dec 2022 - * Added default request parameter ordering before applying authentication - * Fixed possible issue where a socket would reconnect when it should close if it was already in reconnecting - -* Version 5.3.0 - 14 Nov 2022 - * Reworked client architecture, shifting funcationality to the ApiClient - * Fixed ArrayConverter exponent parsing - * Fixed ArrayConverter not checking null - * Added optional delay setting after establishing socket connection - * Added callback for revitalizing a socket request when reconnecting - * Fixed proxy setting websocket - -* Version 5.2.4 - 31 Jul 2022 - * Added handling of PlatformNotSupportedException when trying to use websocket from WebAssembly - * Changed DataEvent to have a public constructor for testing purposes - * Fixed EnumConverter serializing values without proper quotes - * Fixed websocket connection reconnecting too quickly when resubscribing/reauthenticating fails - -* Version 5.2.3 - 19 Jul 2022 - * Fixed socket getting disconnected when `no data` timeout is reached instead of being reconnected - -* Version 5.2.2 - 17 Jul 2022 - * Added support for retrieving a new url when socket connection is lost and reconnection will happen - -* Version 5.2.1 - 16 Jul 2022 - * Fixed socket reconnect issue - * Fixed `message not handled` messages after unsubscribing - * Fixed error returning for non-json error responses - -* Version 5.2.0 - 10 Jul 2022 - * Refactored websocket code, removed some clutter and simplified - * Added ReconnectAsync and GetSubscriptionsState methods on socket clients - -* Version 5.1.12 - 12 Jun 2022 - * Changed time sync so requests no longer wait for it to complete unless it's the first time - * Made log client options changable after client creation - * Fixed proxy setting not used when reconnecting socket - * Changed MaxSocketConnections to a client options - * Updated socket reconnection logic - -* Version 5.1.12 - 12 Jun 2022 - * Changed time sync so requests no longer wait for it to complete unless it's the first time - * Made log client options changable after client creation - * Fixed proxy setting not used when reconnecting socket - * Updated socket reconnection logic - -* Version 5.1.11 - 24 May 2022 - * Added KeepAliveInterval setting - * Fixed port not being copied when setting parameters on request - * Fixed inconsistent PackageReference casing in csproj - -* Version 5.1.10 - 22 May 2022 - * Fixed order book reconnecting while Diposed - * Fixed exception when disposing socket client while reconnecting - * Added additional null/default checking in DateTimeConverter - * Changed ConnectionLost subscription event to run in seperate task to prevent exception/longer operations from intervering with reconnecting - -* Version 5.1.9 - 08 May 2022 - * Added latency to the timesync calculation - * Small fix for exception in socket close handling - -* Version 5.1.8 - 01 May 2022 - * Cleanup socket code, fixed an issue which could cause connections to never reconnect when connection was lost - * Added support for sending requests which expect an empty response - * Fixed issue with the DateTimeConverter date interpretation - -* Version 5.1.7 - 14 Apr 2022 - * Moved some Rest parameters from BaseRestClient to RestApiClient to allow different implementations for sub clients - -* Version 5.1.6 - 10 Mar 2022 - * Updated EnumConverter to properly handle emtpy/null and default values - -* Version 5.1.5 - 09 Mar 2022 - * Removed ResubscribeMaxRetries default value of 5 - * Updated logging and log verbosity - -* Version 5.1.4 - 04 Mar 2022 - * Fixed ArraySerialization handling - * Added check for invalid rate limit configured for a request - -* Version 5.1.3 - 01 Mar 2022 - * Fixed some issues in websocket reconnection, should be more robust now - * Prevent duplicate data reading on error in rest request - * Added ApiName to time sync state to improve log feedback - -* Version 5.1.2 - 27 Feb 2022 - * Fixed issue where the rate limiter was messing with time syncing - * Added support for delegate parameters - * Added `ignoreRateLimit` paramter in `SendRequestAsync` - -* Version 5.1.1 - 24 Feb 2022 - * Fixed issue ApiCredentials - -* Version 5.1.0 - 24 Feb 2022 - * Improved dispose handling in SymbolOrderBook - * Fixed TimeSync RecalculationInterval not being respected - * Small rework client options - -* Version 5.0.0 - * Added Github.io page for documentation: https://jkorf.github.io/CryptoExchange.Net/ - * Added single DateTimeConverter replacing the different timestamp converters - * Added additional request related properties to WebCallResult - * Added CancelationToken support for websockets - * Added CancelationToken support for SymbolOrderBook starting - * Added TimeSync support - * Refactored base client classes into BaseClient and ApiClient to provide a more defined client structure - * Refactored client options to have better control over each different ApiClient - * Refactored authentication provider to be more flexible - * Refactored rate limiter implementation - * Refactored IExchangeClient interface to ISpotClient and IFuturesClient - * Refactored socket reconnection to immediately try to reconnect before waiting the ReconnectTimeout - * Improved SymbolOrderBook stability - * Updated code docs - -* Version 4.2.8 - 08 Oct 2021 - * Fixed deadlock in socket receive - * Fixed issue in reconnection handling when the client is disconnected again during resubscribing - * Added some additional checking of socket state to prevent sending/expecting data when socket is not connected - -* Version 4.2.7 - 06 Oct 2021 - * Made receivedMessages protected again to allow implementations with custom transport (Bittrex) to use it again - -* Version 4.2.6 - 06 Oct 2021 - * Fixed an issue causing socket client to stop processing data in .NET Framework - -* Version 4.2.5 - 05 Oct 2021 - * Added custom async wait event implementation as previous method seems to not work 100% of the time - -* Version 4.2.4 - 30 Sep 2021 - * Fix for InvalidOperationExceptions when running socket connections from .Net framework - -* Version 4.2.3 - 29 Sep 2021 - * Added IncomingKbps property to socket/socket client - * Updated logging - * Socket performance improvements - -* Version 4.2.2 - 23 Sep 2021 - * Restored missing request parameters log - -* Version 4.2.1 - 22 Sep 2021 - * Fìx for websocket not automatically reconnecting when connection is closed unexpectedly - -* Version 4.2.0 - 20 Sep 2021 - * Prevent reconnect spamming when invalid checksum is calculated in SymbolOrderBook - * Added default nonce provider implementation - -* Version 4.1.0 - 15 Sep 2021 - * Added overload for UnsubscribeAsync with id parameter - * Added parameter position configuration per HttpMethod type - * Added option to send custom headers with each requets - * Added option to send custom headers with individual requests - * Added debug data on error - -* Version 4.0.8 - 26 Aug 2021 - * Added rate limiting option for outgoing messages per socket - -* Version 4.0.7 - 24 Aug 2021 - * Additional error info on websocket exception - -* Version 4.0.6 - 24 Aug 2021 - * Removed some debug logging - -* Version 4.0.5 - 24 Aug 2021 - * Added ConnectionClosed event on UpdateSubscriptions to signal the connection was closed and no reconnecting is happening - -* Version 4.0.4 - 24 Aug 2021 - * Websocket connection fixes/improvements - * Added ChecksumValidationEnabled option for controlling checksum validation in SymbolOrderBook - * Added MaxReconnectTries option - * Added MaxResubscribeTries option - * Added MaxConcurrentResubscriptionsPerSocket option - * Fix for TimestampSecondsConverter rounding to nearest millisecond - -* Version 4.0.3 - 20 Aug 2021 - * Fix for concurrent sent socket issue - -* Version 4.0.2 - 20 Aug 2021 - * Fixed socket client continuing before the send/receive loops have been started, which could cause issues when doing concurrent connections - -* Version 4.0.1 - 13 Aug 2021 - * Fixed OperationCancelledException when closing socket from a project targeting .net framework - -* Version 4.0.0 - 12 Aug 2020 - * Release version, summed up changes from previous beta releases: - * Removed `Websocket4Net` dependency in favor of a `ClientWebSocket` native implementation for websocket connections - * Socket events now always come wrapped in a `DataEvent<>` object which contain the timestamp of the data, and optionally the originally received json string - * Implemented usage of the `Microsoft.Extensions.Logging.Abstractions` `ILogger` interface instead of a custom implementation - * Added some properties to the `IExchangeClient` interface - * `ICommonOrder.CommonOrderTime` - * `ICommonOrder.CommonOrderStatus` enum - * `ICommonTrade.CommonTradeTime` - * Added `OnOrderPlaced` and `OnOrderCanceled` events on the `IExchangeClient` interface - * Added `ExchangeHelpers` static class for various helper methods - * Removed non-async methods due to too much overhead in development/maintainance - * If you were previously using non-async methods you can add `.Result` to the end of the async call to get the same result - * Added `Book` property to `SymbolOrderBook` for a book snapshot - * Added `CalculateAverageFillPrice` to `SymbolOrderBook` to calculate the average fill price for an order with the current order book state - * Various fixes - -* Version 4.0.0-beta15 - 12 Aug 2021 - * Conditional version Logging.Abstractions - -* Version 4.0.0-beta14 - 09 Aug 2021 - * Fix for bug in processing order in SymbolOrderBook - -* Version 4.0.0-beta13 - 31 Jul 2021 - * Fix for socket connection - -* Version 4.0.0-beta12 - 26 Jul 2021 - * Fix for socket connection - -* Version 4.0.0-beta11 - 09 Jul 2021 - * Added CalculateAverageFillPrice to SymbolOrderBook - * Added Book property to SymbolOrderBook - * Added Async postfix to async methods - -* Version 4.0.0-beta10 - 07 Jul 2021 - * Updated BaseConverter to be case sensitive - * Added ExchangeHelpers class containing some helper methods - * Fixed responses not being logged on Trace log level - * Added some code docs - -* Version 4.0.0-beta9 - 17 Jun 2021 - * Small fixes - -* Version 4.0.0-beta8 - 08 Jun 2021 - * Fixed exception socket buffer size in .net framework - -* Version 4.0.0-beta7 - 07 Jun 2021 - * Added CommonOrderTime to IOrder - * Added OrderStatus enum for IOrder - * Added OnOrderPlaced and OnOrderCanceled events on IExchangeClient - * Added CommonTradeTime to ICommonTrade - -* Version 4.0.0-beta6 - 01 jun 2021 - * Some logging adjustments - * Fixed some async issues - -* Version 4.0.0-beta5 - 26 May 2021 - * Added DataEvent wrapper for socket updates - * Added optional original json output - * Changed logging implementation to use ILogger - -* Version 4.0.0-beta4 - 06 mei 2021 - * Added analyzers - * Fixed some warnings - -* Version 4.0.0-beta3 - 30 Apr 2021 - * Updated socket closing - -* Version 4.0.0-beta2 - 30 apr 2021 - * Fix for closing socket without timeout task - -* Version 4.0.0-beta1 - 30 apr 2021 - * Removed Websocket4Net dependency - * Added custom ClientWebSocket implementation - * Renamed handler -> subscription internally - * Renamed socket -> socketConenction when type is socketConnection - -* Version 3.9.0 - 28 apr 2021 - * Added optional JsonSerializer parameter to SendRequest to use during deserialization - * Fix for unhandled message warning when unsubscribing a socket subscription - -* Version 3.8.1 - 19 apr 2021 - * Added debug logs - * Added ValidateNullOrNotEmpty extension method - -* Version 3.8.0 - 30 mrt 2021 - * Better handling of json errors while deserializing stream - * Added string datetime converter - -* Version 3.7.1 - 10 mrt 2021 - * Performance improvemnt for the ArrayConverter - -* Version 3.7.0 - 01 mrt 2021 - * Changed GetResponse in RestClient to protected - * Added configuration for deterministic build - -* Version 3.6.1 - 16 feb 2021 - * Fix for timing related exception when stopping an symbol order book - -* Version 3.6.0 - 22 jan 2021 - * Added CommonVolume and CommonOpenTime to ICommonKline interface - -* Version 3.5.0 - 11 jan 2021 - * Additional info on exception messages - * Added support for rate limiting using credits - -* Version 3.4.0 - 21 dec 2020 - * Updated IExchangeClient interface - * Fix for dropping message after timeout on socket - * Added virtual HandleUnhandledMessage method in SocketClient - -* Version 3.3.0 - 10 dec 2020 - * Added client name - * Added common interfaces - * Fixed api key plain text storing in RateLimitterApiKey - -* Version 3.2.1 - 19 nov 2020 - * Fixed error code parsing - -* Version 3.2.0 - 19 nov 2020 - * Fix for multiple socket subscriptions re-using the same socket connection - * Updated errors - -* Version 3.1.0 - 08 Oct 2020 - * Added CallResult without type parameter for calls which don't return data - * Added GetErrorOrResult method on CallResult to support proper nullability checking - * Fix for reading credentials from file - * Fix for setting custom base addresses in clients - -* Version 3.0.15 - 06 Oct 2020 - * Changed default ShouldCheckObjects to false to prevent spam in logging - -* Version 3.0.14 - 24 Aug 2020 - * Updated exception message logging - -* Version 3.0.13 - 24 Aug 2020 - * Added request tracing id for logging - * Added shared HttpClient option - -* Version 3.0.12 - 12 Aug 2020 - * Named parameters on SymbolOrderBook events - -* Version 3.0.11 - 20 Jun 2020 - * Added support for checksum in SymbolOrderBook - -* Version 3.0.10 - 16 Jun 2020 - * Fix for order book synchronization - -* Version 3.0.9 - 07 Jun 2020 - * Added arraySerialization and postParameterPosition to AuthenticationProvider interface - * Fixed array serialization in request body - -* Version 3.0.8 - 02 Jun 2020 - * Added requestBodyEmptyContent setting for rest client - * Added TryParseError for rest implementations to check for error with success status code - -* Version 3.0.7 - 20 May 2020 - * Added error debug output - * Fix for unsubscribe causing possible deadlock - -* Version 3.0.6 - 03 Mar 2020 - * Added BestOffer to SymbolOrderBook, removed invalid check on proxy - -* Version 3.0.5 - 05 Feb 2020 - * Added PausedActivity events on socket subscriptions - -* Version 3.0.4 - 29 Jan 2020 - * Removed unnecessary json serialization - -* Version 3.0.3 - 23 Jan 2020 - * Added OnBestOffersChanged event to order book implementations - -* Version 3.0.2 - 10 Dec 2019 - * Removed invalid check for unauthenticated proxy - -* Version 3.0.1 - 14 Nov 2019 - * Re-enabled debug response logging - -* Version 3.0.0 - 23 Oct 2019 - * Updated to C# 8.0 - * Added .NetStandard2.1 support - * Added Nullability support - * Now using HttpClient instead of WebRequest, should result in faster consequtive requests - * Added CancellationToken support - * Added bool compare override to CallResult (now possible to `if(callresult)` instead of `if(callresult.Success)`) - * Added input validation methods - * Wrong input will now throw exceptions rather than error results - * OnOrderBookUpdate event added to `SymbolOrderBook` - - -* Version 2.1.8 - 29 Aug 2019 - * Added array serialization options for implementations - -* Version 2.1.7 - 07 Aug 2019 - * Fixed bug with socket connection not being disposed after lost connection - * Resubscribing after reconnecting socket now in parallel - -* Version 2.1.6 - 06 Aug 2019 - * Fix for missing subscription events if they are also a request response, added code docs - -* Version 2.1.5 - 09 jul 2019 - * Updated SymbolOrderBook - -* Version 2.1.4 - 24 jun 2019 - * Added checks for json deserialization issues - -* Version 2.1.3 - 16 may 2019 - * Refactored SymbolOrderBook - * Added BestBid/BestAsk properties for order book - -* Version 2.1.2 - 14 may 2019 - * Added order book base class for easy implementation - * Added additional constructor to ApiCredentials to be able to read from file \ No newline at end of file