use serde_json::json;
use std::sync::Arc;
use tap_agent::key_manager::{Secret, SecretMaterial, SecretType};
use tap_node::event::logger::EventLogger;
use tap_node::event::EventBus;
use tap_node::{EventSubscriber, NodeEvent};
#[derive(Debug)]
struct ConsoleSubscriber;
#[async_trait::async_trait]
impl EventSubscriber for ConsoleSubscriber {
async fn handle_event(&self, event: NodeEvent) {
println!("Event: {:?}", event);
}
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let event_bus = Arc::new(tap_node::event::EventBus::new());
let logger_config = tap_node::event::logger::EventLoggerConfig {
destination: tap_node::event::logger::LogDestination::Console,
structured: false,
log_level: log::Level::Info,
};
let event_logger = Arc::new(EventLogger::new(logger_config));
let console_subscriber = Arc::new(ConsoleSubscriber);
event_bus.subscribe(console_subscriber).await;
event_bus.subscribe(event_logger.clone()).await;
event_bus
.publish_agent_registered("did:example:alice".to_string())
.await;
event_bus
.publish_did_resolved("did:example:bob".to_string(), true)
.await;
let message_bytes = serde_json::to_string(&json!({
"id": "msg-456",
"type": "tap.transfer.reply",
"from": "did:example:bob",
"to": "did:example:alice"
}))
.unwrap()
.into_bytes();
event_bus
.publish_agent_message("did:example:bob".to_string(), message_bytes)
.await;
simulate_agent_setup(&event_logger).await;
tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;
Ok(())
}
async fn simulate_agent_setup(event_logger: &Arc<EventLogger>) {
#[derive(Debug)]
#[allow(dead_code)]
struct TestDIDResolver;
let _did_resolver = Arc::new(tap_agent::did::MultiResolver::default());
let mut key_manager_builder = tap_agent::agent_key_manager::AgentKeyManagerBuilder::new();
let secret = Secret {
id: "did:example:alice".to_string(),
type_: SecretType::JsonWebKey2020,
secret_material: SecretMaterial::JWK {
private_key_jwk: serde_json::json!({
"kty": "OKP",
"crv": "Ed25519",
"x": "test1234",
"d": "test1234"
}),
},
};
key_manager_builder = key_manager_builder.add_secret("did:example:alice".to_string(), secret);
let _agent_key_manager = key_manager_builder
.build()
.expect("Failed to build key manager");
let _config = tap_agent::config::AgentConfig::new("did:example:alice".to_string())
.with_security_mode("SIGNED")
.with_debug(true);
let event_bus = Arc::new(EventBus::new());
event_bus.subscribe(event_logger.clone()).await;
event_bus
.publish_agent_registered("did:example:alice".to_string())
.await;
println!("Agent setup simulation completed");
}