HTTP Service
The rig-onchain-kit provides a production-ready HTTP service that enables:
- Server-Sent Events (SSE) streaming for real-time AI agent responses
 - Multi-chain support (EVM and Solana) through feature flags
 - User authentication and wallet management via Privy
 - Concurrent handling of multiple chat sessions
 
Core Endpoints
The service exposes these main endpoints:
POST /v1/stream   - Stream AI agent responses
GET  /v1/auth     - Verify authentication status
GET  /healthz     - Health check endpoint
Streaming Endpoint
The /v1/stream endpoint accepts:
{
  prompt: string,
  chat_history: Message[],
  chain: "solana" | "evm" | "pump" // Chain selection
}
It returns a Server-Sent Events stream containing:
{
  type: "Message" | "ToolCall" | "Error",
  content: {
    // For Message: string with AI response
    // For ToolCall: { name: string, result: string }
    // For Error: error message string
  }
}
Features
Chain Selection
The service supports multiple blockchain environments through feature flags:
#![allow(unused)] fn main() { // Select agent based on chain parameter match request.chain.as_deref() { #[cfg(feature = "solana")] Some("solana") => state.solana_agent.clone(), #[cfg(feature = "evm")] Some("evm") => state.evm_agent.clone(), // ... } }
Concurrent Sessions
The service handles multiple simultaneous chat sessions using Tokio channels and tasks:
#![allow(unused)] fn main() { let (tx, rx) = tokio::sync::mpsc::channel::<sse::Event>(32); spawn_with_signer(signer, || async move { // Handle individual chat session }).await; }
Keep-alive & Retry Logic
The SSE implementation includes built-in keep-alive and retry mechanisms:
#![allow(unused)] fn main() { sse::Sse::from_infallible_receiver(rx) .with_keep_alive(Duration::from_secs(15)) .with_retry_duration(Duration::from_secs(10)) }
Configuration
The service is configured through the AppState which manages:
- Chain-specific AI agents
 - Wallet manager instance
 - Authentication settings
 
#![allow(unused)] fn main() { let state = AppState::builder() .with_wallet_manager(wallet_manager) .with_solana_agent(solana_agent) // Optional .with_evm_agent(evm_agent) // Optional .build()?; }