server/auth/
errors.rs

1use thiserror::Error;
2
3/// Errors that can occur during token refresh operations
4#[derive(Debug, Clone, Error)]
5pub enum TokenRefreshError {
6    #[error("Token refresh failed after {attempts} attempts")]
7    MaxRetriesExceeded { attempts: u32 },
8
9    #[error("Network error during token refresh: {reason}")]
10    NetworkError { reason: String },
11
12    #[error("Invalid refresh token")]
13    InvalidRefreshToken,
14
15    #[error("Token refresh not supported by provider")]
16    RefreshNotSupported,
17
18    #[error("Authentication required - refresh token expired")]
19    RefreshTokenExpired,
20
21    #[error("Rate limited by authentication provider")]
22    RateLimited { retry_after_seconds: Option<u64> },
23
24    #[error("Service unavailable: {reason}")]
25    ServiceUnavailable { reason: String },
26
27    #[error("Internal error: {0}")]
28    Internal(String),
29}
30
31impl From<TokenRefreshError> for crate::service_bus_manager::ServiceBusError {
32    fn from(err: TokenRefreshError) -> Self {
33        match err {
34            TokenRefreshError::RefreshTokenExpired | TokenRefreshError::InvalidRefreshToken => {
35                crate::service_bus_manager::ServiceBusError::AuthenticationFailed(err.to_string())
36            }
37            TokenRefreshError::NetworkError { .. }
38            | TokenRefreshError::ServiceUnavailable { .. } => {
39                crate::service_bus_manager::ServiceBusError::ConnectionFailed(err.to_string())
40            }
41            TokenRefreshError::RateLimited { .. } => {
42                crate::service_bus_manager::ServiceBusError::OperationTimeout(err.to_string())
43            }
44            _ => crate::service_bus_manager::ServiceBusError::AuthenticationError(err.to_string()),
45        }
46    }
47}