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") }