using FrameworkDAL.DTO.EIPConversation; using System.Threading; using System.Threading.Tasks; namespace FrameworkBLL.EIPConversation.EIPHandlers.EIPOTP { public interface IEIPOtpService { /// True if a still-pending, unexpired OTP already exists for this /// (tenant, user, capability) — signals the capability engine that the next /// inbound message should be treated as a verification attempt, not a fresh trigger. Task HasPendingOtpAsync( string capabilityCode, EIPExecutionContextDTO context, CancellationToken cancellationToken); Task GenerateOtpAsync( string capabilityCode, EIPExecutionContextDTO context, CancellationToken cancellationToken); Task VerifyOtpAsync( string capabilityCode, string otp, EIPExecutionContextDTO context, CancellationToken cancellationToken); } }