pub mod advertise;
pub mod client;
pub mod origin;
pub mod paid;
pub mod proof;
pub use advertise::{SiwxChain, SiwxExtension};
pub use client::{SiwxClientExtension, SiwxSigner};
pub use origin::{SiwxOrigin, SiwxOriginError};
pub use paid::{InMemoryPaidAddressStore, PaidAddressStore};
pub use proof::{SiwxProof, SiwxProofError};
pub use siwx_evm::EvmVerifier;
pub const SIWX_KEY: &str = "sign-in-with-x";
pub const SIWX_HTTP_HEADER: &str = "SIGN-IN-WITH-X";
pub const DEFAULT_MAX_ISSUED_AGE: time::Duration = time::Duration::minutes(5);
pub const DEFAULT_CHALLENGE_TTL: time::Duration = time::Duration::minutes(5);
pub const DEFAULT_STATEMENT: &str = "Sign in to access this resource";
#[derive(Debug, Clone, Copy, PartialEq, Eq, thiserror::Error)]
#[non_exhaustive]
pub enum SiwxError {
#[error("invalid_siwx_domain_mismatch")]
DomainMismatch,
#[error("invalid_siwx_uri_mismatch")]
UriMismatch,
#[error("invalid_siwx_issued_at")]
IssuedAt,
#[error("invalid_siwx_issued_at_too_old")]
IssuedAtTooOld,
#[error("invalid_siwx_issued_at_in_future")]
IssuedAtInFuture,
#[error("invalid_siwx_expiration_time")]
ExpirationTime,
#[error("invalid_siwx_expired")]
Expired,
#[error("invalid_siwx_not_before")]
NotBefore,
#[error("invalid_siwx_not_yet_valid")]
NotYetValid,
#[error("invalid_siwx_nonce")]
Nonce,
#[error("invalid_siwx_signature")]
Signature,
#[error("invalid_siwx_chain_id")]
ChainId,
#[error("invalid_siwx_unsupported_chain")]
UnsupportedChain,
#[error("invalid_siwx_malformed_signature")]
MalformedSignature,
#[error("invalid_siwx_verifier_error")]
VerifierError,
}
impl SiwxError {
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::DomainMismatch => "invalid_siwx_domain_mismatch",
Self::UriMismatch => "invalid_siwx_uri_mismatch",
Self::IssuedAt => "invalid_siwx_issued_at",
Self::IssuedAtTooOld => "invalid_siwx_issued_at_too_old",
Self::IssuedAtInFuture => "invalid_siwx_issued_at_in_future",
Self::ExpirationTime => "invalid_siwx_expiration_time",
Self::Expired => "invalid_siwx_expired",
Self::NotBefore => "invalid_siwx_not_before",
Self::NotYetValid => "invalid_siwx_not_yet_valid",
Self::Nonce => "invalid_siwx_nonce",
Self::Signature => "invalid_siwx_signature",
Self::ChainId => "invalid_siwx_chain_id",
Self::UnsupportedChain => "invalid_siwx_unsupported_chain",
Self::MalformedSignature => "invalid_siwx_malformed_signature",
Self::VerifierError => "invalid_siwx_verifier_error",
}
}
}