Files
sxchnge/backend/product/verification/store/errors.go
T

70 lines
1.8 KiB
Go

package verification
import (
"time"
"git.sendico.io/tech/sxchnge/shared/errors"
)
var (
ErrTokenNotFound = merrors.Define("vtNotFound")
ErrTokenAlreadyUsed = merrors.Define("vtAlreadyUsed")
ErrTokenExpired = merrors.Define("vtExpired")
ErrTokenAttemptsExceeded = merrors.Define("vtAttemptsExceeded")
ErrCooldownActive = merrors.Define("vtCooldownActive")
ErrIdempotencyConflict = merrors.Define("vtIdempotencyConflict")
ErrIssuanceRateLimited = merrors.Define("vtIssuanceRateLimited")
)
type ThrottleDetails = merrors.ThrottleDetails
func Throttle(err error) (ThrottleDetails, bool) {
return merrors.ThrottleDetailsFrom(err)
}
func wrap(err error, msg string) error {
return merrors.Wrap(err, msg)
}
func ErorrTokenNotFound() error {
return wrap(ErrTokenNotFound, "verification token not found")
}
func ErorrTokenAlreadyUsed() error {
return wrap(ErrTokenAlreadyUsed, "verification token has already been used")
}
func ErorrTokenExpired() error {
return wrap(ErrTokenExpired, "verification token expired")
}
func ErrorCooldownActive() error {
return ErrorCooldownActiveFor(0)
}
func ErrorCooldownActiveFor(retryAfter time.Duration) error {
return merrors.WithThrottle(
ErrCooldownActive,
"cooldown",
retryAfter,
"verification request is temporarily limited",
)
}
func ErrorIssuanceRateLimited(scopeKind string, retryAfter time.Duration) error {
return merrors.WithThrottle(
ErrIssuanceRateLimited,
scopeKind,
retryAfter,
"verification request is temporarily limited",
)
}
func ErrorTokenAttemptsExceeded() error {
return wrap(ErrTokenAttemptsExceeded, "verification token max attempts exceeded")
}
func ErrorIdempotencyConflict() error {
return wrap(ErrIdempotencyConflict, "verification token request idempotency key has already been used")
}