using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.SignalR; namespace Distribution.Features.Notifications; /// /// Server → client only. The server pushes a "notification" event to each recipient; clients never /// invoke hub methods. Users are addressed by their id (see ). /// [Authorize] public class NotificationHub : Hub { public const string Path = "/hubs/notifications"; public const string ClientEvent = "notification"; } /// Maps a SignalR connection to the "UserId" claim that AuthMiddleware puts on the principal. public class NotificationUserIdProvider : IUserIdProvider { public string? GetUserId(HubConnectionContext connection) => connection.User?.FindFirst("UserId")?.Value; }