#![forbid(unsafe_code)]
#![doc = include_str!("../README.md")]
pub const FORMAT_VERSION: &str = "codlet/v1";
pub mod admin;
pub mod audit;
pub mod auth;
pub mod clock;
pub mod code;
pub mod cookie;
pub mod error;
pub mod hashing;
pub mod metrics;
pub mod rng;
pub mod secret;
pub mod state;
pub mod store;
#[cfg(any(test, feature = "test-utils"))]
pub mod mem;
pub use audit::{AuditSink, CodeAuthEvent, NoopAuditSink};
pub use auth::{
CodeAuth, FormTokenError, FormTokenManager, IssuedSession, NoRateLimit, RedeemError,
RedeemSuccess, SessionError, SessionManager,
};
pub use clock::{Clock, SystemClock};
pub use code::{Alphabet, CodePolicy, generate_code, normalize, validate_code_input};
pub use cookie::{CookiePolicy, CookieProfile, SameSitePolicy};
pub use error::{
CodeInputError, KeyError, PolicyError, PublicFormError, PublicRedemptionError,
PublicSessionError, RandomError, RedemptionFailReason,
};
pub use hashing::{
HmacKeyRef, KeyProvider, KeyVersion, LookupKey, SecretDomain, SecretHasher, StaticKeyProvider,
};
pub use metrics::{MetricsObserver, NoopMetrics, Outcome, counter};
pub use rng::{RandomSource, SystemRandom};
pub use secret::{
CodeId, FormTokenSecret, NormalizedCode, PlainCode, Purpose, ScopeKey, SecretString, SessionId,
SessionSecret, SubjectId,
};
pub use state::{
ClaimOutcome, SessionValidationOutcome, TokenConsumeOutcome, classify_claim, classify_session,
classify_token_consume,
};
pub use store::{
error::{PublicAuthError, StoreError},
ratelimit::{
RateLimitKey, RateLimitOutcome, RateLimitPolicy, RateLimitStore, RateLimitUnavailable,
},
token::TokenSubject,
};
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn format_version_is_stable() {
assert_eq!(FORMAT_VERSION, "codlet/v1");
}
}