self_agent_sdk/lib.rs
1// SPDX-FileCopyrightText: 2025-2026 Social Connect Labs, Inc.
2// SPDX-License-Identifier: BUSL-1.1
3// NOTE: Converts to Apache-2.0 on 2029-06-11 per LICENSE.
4
5//! Rust SDK for Self Agent ID — on-chain AI agent identity with proof-of-human.
6//!
7//! # Quick Start
8//!
9//! ## Agent side (signing requests)
10//!
11//! ```no_run
12//! use self_agent_sdk::{SelfAgent, SelfAgentConfig, NetworkName};
13//!
14//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
15//! # tokio::runtime::Runtime::new()?.block_on(async {
16//! let agent = SelfAgent::new(SelfAgentConfig {
17//! private_key: "0x...".to_string(),
18//! network: Some(NetworkName::Testnet),
19//! registry_address: None,
20//! rpc_url: None,
21//! })?;
22//!
23//! // Check on-chain status
24//! let registered = agent.is_registered().await?;
25//!
26//! // Auto-signed HTTP request
27//! let response = agent.fetch("https://api.example.com/data", None, None).await?;
28//! # let _ = (registered, response);
29//! # Ok::<(), Box<dyn std::error::Error>>(())
30//! # })?;
31//! # Ok(())
32//! # }
33//! ```
34//!
35//! ## Service side (verifying requests)
36//!
37//! ```no_run
38//! use self_agent_sdk::{SelfAgentVerifier, VerifierConfig};
39//!
40//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
41//! # tokio::runtime::Runtime::new()?.block_on(async {
42//! let mut verifier = SelfAgentVerifier::new(VerifierConfig::default());
43//! let signature = "0x...";
44//! let timestamp = "1700000000000";
45//! let body = r#"{"test":true}"#;
46//! let result = verifier.verify(signature, timestamp, "POST", "/api/data", Some(body)).await;
47//! if result.valid {
48//! println!("Verified agent: {:?}", result.agent_address);
49//! }
50//! # Ok::<(), Box<dyn std::error::Error>>(())
51//! # })?;
52//! # Ok(())
53//! # }
54//! ```
55
56pub mod agent;
57pub mod agent_card;
58pub mod constants;
59pub mod registration;
60pub mod registration_flow;
61pub mod verifier;
62
63#[cfg(feature = "axum")]
64pub mod middleware;
65
66// Re-exports
67pub use agent::{AgentInfo, SelfAgent, SelfAgentConfig};
68pub use agent_card::{
69 A2AAgentCard, AgentSkill, CardCredentials, SelfProtocolExtension, TrustModel,
70 get_provider_label, get_strength_color,
71};
72pub use constants::{headers, NetworkName};
73pub use registration::{
74 RegistrationDisclosures, SignatureParts, SignedRegistrationChallenge,
75 build_advanced_deregister_user_data_ascii, build_advanced_register_user_data_ascii,
76 build_simple_deregister_user_data_ascii, build_simple_register_user_data_ascii,
77 build_wallet_free_register_user_data_ascii, compute_registration_challenge_hash,
78 get_registration_config_index, sign_registration_challenge,
79};
80pub use registration_flow::{
81 DeregistrationRequest, DeregistrationSession, RegistrationError, RegistrationRequest,
82 RegistrationResult, RegistrationSession,
83};
84pub use verifier::{
85 AgentCredentials, RateLimitConfig, SelfAgentVerifier, VerificationResult, VerifierBuilder,
86 VerifierConfig, VerifierFromConfig,
87};
88
89#[cfg(feature = "axum")]
90pub use middleware::{self_agent_auth, VerifiedAgent};
91
92/// Errors that can occur in the SDK.
93#[derive(Debug, thiserror::Error)]
94pub enum Error {
95 #[error("invalid private key")]
96 InvalidPrivateKey,
97 #[error("invalid RPC URL")]
98 InvalidRpcUrl,
99 #[error("invalid signature")]
100 InvalidSignature,
101 #[error("signing error: {0}")]
102 SigningError(String),
103 #[error("RPC error: {0}")]
104 RpcError(String),
105 #[error("HTTP error: {0}")]
106 HttpError(String),
107}