sentrystr 0.2.0

Core library for publishing Sentry-like events to Nostr network
Documentation
use nostr::Keys;
use sentrystr::{Config, EncryptionHelper, Event, Level, NostrSentryClient};

#[tokio::main]
async fn main() -> sentrystr::Result<()> {
    println!("SentryStr NIP-44 Encryption Example");
    println!("==================================");

    let sender_keys = Keys::generate();
    let receiver_keys = Keys::generate();

    println!("Sender public key: {}", sender_keys.public_key());
    println!("Receiver public key: {}", receiver_keys.public_key());
    println!();

    let relays = vec![
        "wss://relay.damus.io".to_string(),
        "wss://nostr.chaima.info".to_string(),
    ];

    let config = Config::new(
        sender_keys.secret_key().display_secret().to_string(),
        relays,
    )
    .with_nip44_encryption(receiver_keys.public_key().to_string());

    let client = NostrSentryClient::new(config).await?;

    println!("Publishing encrypted events...");

    let event = Event::new()
        .with_message("This is an encrypted error message")
        .with_level(Level::Error)
        .with_tag("component", "encrypted-example")
        .with_tag("encrypted", "true")
        .with_extra("secret_data", serde_json::json!("sensitive information"));

    let event_id = client.capture_event(event).await?;
    println!("Published encrypted event: {}", event_id);

    client
        .capture_message("Encrypted message from SentryStr")
        .await?;
    client
        .capture_error("Encrypted error from SentryStr")
        .await?;

    println!();
    println!("Demonstrating direct encryption/decryption...");

    let test_message = "Secret log message: authentication failed for user admin";
    let encrypted = EncryptionHelper::encrypt_nip44(
        sender_keys.secret_key(),
        &receiver_keys.public_key(),
        test_message,
    )?;

    println!("Original: {}", test_message);
    println!("Encrypted: {}", encrypted);

    let decrypted = EncryptionHelper::decrypt_nip44(
        receiver_keys.secret_key(),
        &sender_keys.public_key(),
        &encrypted,
    )?;

    println!("Decrypted: {}", decrypted);

    client.disconnect().await?;
    Ok(())
}