rig-onchain-kit 1.0.0

Blockchain actions for AI agents
Documentation
use super::config::PrivyConfig;
use base64::{engine::general_purpose::STANDARD, Engine as _};

pub fn create_http_client(privy_config: &PrivyConfig) -> reqwest::Client {
    reqwest::Client::builder()
        .default_headers({
            let mut headers = reqwest::header::HeaderMap::new();
            headers.insert(
                "privy-app-id",
                privy_config.app_id.parse().expect("Failed to parse header"),
            );
            headers.insert(
                "Content-Type",
                "application/json".parse().expect("Failed to parse header"),
            );
            headers.insert(
                "Authorization",
                format!(
                    "Basic {}",
                    base64encode(
                        format!(
                            "{}:{}",
                            privy_config.app_id, privy_config.app_secret
                        )
                        .as_bytes(),
                    )
                )
                .parse()
                .expect("Failed to parse header"),
            );
            headers
        })
        .build()
        .unwrap()
}

pub fn base64encode(data: &[u8]) -> String {
    STANDARD.encode(data)
}

#[cfg(feature = "solana")]
pub fn transaction_to_base64(
    transaction: &solana_sdk::transaction::Transaction,
) -> anyhow::Result<String> {
    let serialized = bincode::serialize(transaction)?;
    Ok(base64encode(&serialized))
}