SMS, email, messenger — the channel is transport. Rate limits, attempt counters, single-use expiry: those live above it, once. We learned this building otpguard. If your OTP logic changes when the channel does, what exactly did you make pluggable?
Was this useful?