diff --git a/Tzkt.Api/Startup.cs b/Tzkt.Api/Startup.cs index b2613fda9..2f2f16cf0 100644 --- a/Tzkt.Api/Startup.cs +++ b/Tzkt.Api/Startup.cs @@ -18,7 +18,8 @@ using Tzkt.Api.Websocket.Hubs; using Tzkt.Api.Websocket.Processors; using Tzkt.Data; - +using System.Text.Json.Serialization; + namespace Tzkt.Api { public class Startup @@ -92,8 +93,8 @@ public void ConfigureServices(IServiceCollection services) services.AddTransient>(); services.AddTransient>(); - services.AddTransient>(); - services.AddTransient>(); + services.AddTransient>(); + services.AddTransient>(); services.AddTransient>(); services.AddTransient>(); @@ -126,6 +127,7 @@ public void ConfigureServices(IServiceCollection services) jsonOptions.PayloadSerializerOptions.Converters.Add(new DateTimeConverter()); jsonOptions.PayloadSerializerOptions.Converters.Add(new OperationConverter()); jsonOptions.PayloadSerializerOptions.Converters.Add(new OperationErrorConverter()); + jsonOptions.PayloadSerializerOptions.Converters.Add(new JsonStringEnumConverter()); }); } #endregion diff --git a/Tzkt.Api/Swagger/WsSubscriptions.md b/Tzkt.Api/Swagger/WsSubscriptions.md index 2fee36f0e..4659e3b5b 100644 --- a/Tzkt.Api/Swagger/WsSubscriptions.md +++ b/Tzkt.Api/Swagger/WsSubscriptions.md @@ -37,18 +37,20 @@ Sends the blockchain head every time cycle is changed. ### Method -`SubscribeToCycle` +`SubscribeToCycles` ### Channel -`cycle` +`cycles` ### Parameters ````js { - delayBlocks: 2, // number of blocks to delay cycle changed notification - // minimum 2, defaults to 2 + delayBlocks: 2, // number of blocks to delay cycle changed notification + // minimum 2, defaults to 2 + quote: "eur,usd" // comma-separated list of ticker symbols to inject historical prices into response + // defaults to "none" } ```` @@ -63,8 +65,8 @@ State contains cycle (`int`) of the last processed cycle. ### Example ````js -connection.on("cycle", (msg) => { console.log(msg); }); -await connection.invoke("SubscribeToCycle"); +connection.on("cycles", (msg) => { console.log(msg); }); +await connection.invoke("SubscribeToCycles"); ```` --- diff --git a/Tzkt.Api/Websocket/Hubs/DefaultHub.cs b/Tzkt.Api/Websocket/Hubs/DefaultHub.cs index 454b772f3..c536595f8 100644 --- a/Tzkt.Api/Websocket/Hubs/DefaultHub.cs +++ b/Tzkt.Api/Websocket/Hubs/DefaultHub.cs @@ -9,7 +9,7 @@ namespace Tzkt.Api.Websocket.Hubs public class DefaultHub : BaseHub { readonly HeadProcessor Head; - readonly CycleProcessor Cycle; + readonly CyclesProcessor Cycle; readonly BlocksProcessor Blocks; readonly OperationsProcessor Operations; readonly BigMapsProcessor BigMaps; @@ -19,7 +19,7 @@ public class DefaultHub : BaseHub public DefaultHub( HeadProcessor head, - CycleProcessor cycle, + CyclesProcessor cycle, BlocksProcessor blocks, OperationsProcessor operations, BigMapsProcessor bigMaps, @@ -44,7 +44,7 @@ public Task SubscribeToHead() return Head.Subscribe(Clients.Caller, Context.ConnectionId); } - public Task SubscribeToCycle(CycleParameter parameters) + public Task SubscribeToCycles(CyclesParameter parameters = null) { parameters ??= new(); parameters.EnsureValid(); diff --git a/Tzkt.Api/Websocket/Parameters/CycleParameter.cs b/Tzkt.Api/Websocket/Parameters/CyclesParameter.cs similarity index 79% rename from Tzkt.Api/Websocket/Parameters/CycleParameter.cs rename to Tzkt.Api/Websocket/Parameters/CyclesParameter.cs index e2b008825..2f7b52393 100644 --- a/Tzkt.Api/Websocket/Parameters/CycleParameter.cs +++ b/Tzkt.Api/Websocket/Parameters/CyclesParameter.cs @@ -1,9 +1,11 @@ using Microsoft.AspNetCore.SignalR; +using Newtonsoft.Json.Converters; +using System.Text.Json.Serialization; using Tzkt.Api.Models; namespace Tzkt.Api.Websocket { - public class CycleParameter + public class CyclesParameter { public int DelayBlocks { get; set; } = 2; // 2 to cover possible reorganization public Symbols Quote { get; set; } = Symbols.None; diff --git a/Tzkt.Api/Websocket/Processors/CyclesProcessor.cs b/Tzkt.Api/Websocket/Processors/CyclesProcessor.cs index ffcfc556c..49092f49a 100644 --- a/Tzkt.Api/Websocket/Processors/CyclesProcessor.cs +++ b/Tzkt.Api/Websocket/Processors/CyclesProcessor.cs @@ -12,11 +12,11 @@ namespace Tzkt.Api.Websocket.Processors { - public class CycleProcessor : IHubProcessor where T : Hub + public class CyclesProcessor : IHubProcessor where T : Hub { #region static - const string CycleGroup = "cycle"; - const string CycleChannel = "cycle"; + const string CycleGroup = "cycles"; + const string CycleChannel = "cycles"; static readonly SemaphoreSlim Sema = new(1, 1); static readonly Dictionary> DelaySubs = new(); static readonly Dictionary QuoteSubs = new(); @@ -27,7 +27,7 @@ public class CycleProcessor : IHubProcessor where T : Hub readonly IHubContext Context; readonly ILogger Logger; - public CycleProcessor(StateCache cache, CyclesRepository repo, IHubContext hubContext, ILogger> logger) + public CyclesProcessor(StateCache cache, CyclesRepository repo, IHubContext hubContext, ILogger> logger) { StateCache = cache; CyclesRepo = repo; @@ -79,7 +79,7 @@ public async Task OnStateChanged() } } - public async Task Subscribe(IClientProxy client, string connectionId, CycleParameter parameter) + public async Task Subscribe(IClientProxy client, string connectionId, CyclesParameter parameter) { Task sending = Task.CompletedTask; try