use std::sync::Arc;
use tap_node::{HttpPlainMessageSenderWithTracking, PlainMessageSender, Storage};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
env_logger::init();
let storage = Arc::new(Storage::new(None).await?);
let sender =
HttpPlainMessageSenderWithTracking::new("https://example.com".to_string(), storage.clone());
let packed_message = r#"{"test": "message"}"#.to_string();
let recipients = vec![
"did:example:alice".to_string(),
"did:example:bob".to_string(),
];
println!(
"Attempting to send message to {} recipients",
recipients.len()
);
match sender.send(packed_message, recipients).await {
Ok(_) => println!("Message sent successfully"),
Err(e) => println!("Message delivery failed: {}", e),
}
println!("\nDelivery records:");
let pending_deliveries = storage.get_pending_deliveries(5, 10).await?;
println!("Found {} pending deliveries", pending_deliveries.len());
for delivery in pending_deliveries {
println!("Delivery ID: {}", delivery.id);
println!(" Message ID: {}", delivery.message_id);
println!(" Recipient: {}", delivery.recipient_did);
println!(" URL: {:?}", delivery.delivery_url);
println!(" Status: {:?}", delivery.status);
println!(" Retry count: {}", delivery.retry_count);
println!(" HTTP status: {:?}", delivery.last_http_status_code);
println!(" Error: {:?}", delivery.error_message);
println!(" Created: {}", delivery.created_at);
println!(" Updated: {}", delivery.updated_at);
println!(" Delivered: {:?}", delivery.delivered_at);
println!();
}
let failed_deliveries = storage
.get_failed_deliveries_for_recipient("did:example:alice", 10, 0)
.await?;
println!(
"Found {} failed deliveries for did:example:alice",
failed_deliveries.len()
);
Ok(())
}