Skip to main content

lastid_sdk/
lib.rs

1//! # `LastID` Rust SDK
2//!
3//! Rust SDK for integrating with the `LastID` Identity Provider (IDP) to
4//! request and verify credentials from users.
5//!
6//! ## Quick Start
7//!
8//! ```rust,no_run
9//! use lastid_sdk::policies::BaseCredentialPolicy;
10//! use lastid_sdk::ClientBuilder;
11//!
12//! # async fn example() -> Result<(), lastid_sdk::LastIDError> {
13//! // Initialize client
14//! let client = ClientBuilder::new().with_auto_config()?.build()?;
15//!
16//! // Build policy (type-safe)
17//! let policy = BaseCredentialPolicy::new()
18//!     .with_callback("https://your-app.com/callback");
19//!
20//! // Request credential
21//! let request_id = client.request_credential(policy).await?;
22//! # Ok(())
23//! # }
24//! ```
25//!
26//! ## Features
27//!
28//! - **Type-safe policy builders** with compile-time validation
29//! - **8 credential types**: Base, Persona, `VerifiedEmail`, `VerifiedPhone`,
30//!   `VerifiedPersona`, Employment, Trust, `AgeProof`
31//! - **`DPoP` authentication** (RFC 9449) for proof-of-possession
32//! - **Trust registry validation** with 60-second caching
33//! - **Async-first** design on tokio runtime
34//! - **WASM support** for browser applications
35
36// Forbid unsafe code (FR-029)
37#![forbid(unsafe_code)]
38// Enable strict lints
39#![warn(clippy::all, clippy::pedantic, clippy::nursery)]
40// Allow common patterns
41#![allow(
42    clippy::module_name_repetitions,
43    clippy::must_use_candidate,
44    clippy::missing_errors_doc,
45    clippy::missing_panics_doc
46)]
47
48// Module declarations
49pub mod auth;
50pub mod bindings;
51pub mod client;
52pub mod config;
53pub mod constants;
54pub mod crypto;
55pub mod error;
56pub mod http;
57pub mod policies;
58pub mod shared;
59pub mod trust_registry;
60pub mod types;
61pub mod verification;
62
63// Test utilities (gated by feature)
64#[cfg(feature = "test-utils")]
65pub mod test_utils;
66
67// WASM bindings (gated by feature and target)
68#[cfg(all(feature = "wasm", target_arch = "wasm32"))]
69pub mod wasm;
70
71// Node.js native bindings via napi-rs (gated by feature, native only)
72#[cfg(all(feature = "napi", not(target_arch = "wasm32")))]
73pub mod napi;
74
75// Re-export primary types for ergonomic usage
76pub use client::{ClientBuilder, LastIDClient};
77pub use config::{CacheConfig, NetworkConfig, PollingConfig, RetryPolicy, SDKConfig};
78pub use error::{HttpError, LastIDError, TrustRegistryError};
79pub use http::{CorrelationIdConfig, HttpIdpClient, IdpClient};
80// Re-export policy builders based on feature flags
81#[cfg(feature = "base-policy")]
82pub use policies::BaseCredentialPolicy;
83// Re-export policy builder trait
84pub use policies::PolicyBuilder;
85#[cfg(feature = "verified-email-policy")]
86pub use policies::VerifiedEmailPolicy;
87#[cfg(feature = "verified-phone-policy")]
88pub use policies::VerifiedPhonePolicy;
89#[cfg(feature = "age-proof-policy")]
90pub use policies::{AgeComparison, AgeProofPolicy};
91#[cfg(feature = "employment-policy")]
92pub use policies::{EmploymentField, EmploymentPolicy, EmploymentStatus};
93#[cfg(feature = "persona-policy")]
94pub use policies::{PersonaField, PersonaPolicy};
95#[cfg(feature = "trust-policy")]
96pub use policies::{TrustLevel, TrustPolicy};
97#[cfg(feature = "verified-persona-policy")]
98pub use policies::{VerificationLevel, VerifiedPersonaField, VerifiedPersonaPolicy};
99// Re-export trust registry types
100pub use trust_registry::{IssuerInfo, IssuerStatus};
101pub use types::{
102    ClientId, CredentialRequestResponse, Did, EndpointUrl, RequestId, RequestStatus,
103    VerifiedCredential,
104};
105// Re-export verification types
106pub use verification::VerifiablePresentation;