namespace ROLAC.API.Services.Notifications; /// The three fields a browser hands over when it creates a push subscription. public sealed record WebPushTarget(string Endpoint, string P256dh, string Auth); /// /// Outcome of pushing to one subscription. is true when the push service /// reported the subscription is gone (HTTP 404/410) so the caller can prune it. /// public sealed record WebPushSendResult(bool Success, bool IsExpired, string? Error); /// /// Thin wrapper over the WebPush library's encrypt-and-POST so that 's /// recipient resolution, pruning, and logging can be unit-tested without a real push service. /// public interface IWebPushSender { Task SendAsync(WebPushTarget target, string payloadJson, CancellationToken ct = default); }