use std::sync::Arc;
use std::time::Duration;
use tap_agent::agent_key_manager::AgentKeyManagerBuilder;
use tap_agent::config::AgentConfig;
use tap_agent::did::MultiResolver;
use tap_agent::key_manager::{Secret, SecretMaterial, SecretType};
use tap_agent::TapAgent;
use tap_msg::didcomm::PlainMessage;
use tokio::time::sleep;
#[derive(Debug)]
#[allow(dead_code)]
struct TestDIDResolver;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let _resolver = Arc::new(MultiResolver::default());
let mut alice_builder = AgentKeyManagerBuilder::new();
let mut bob_builder = AgentKeyManagerBuilder::new();
let alice_secret = create_test_secret("did:example:alice", "alice-key");
alice_builder = alice_builder.add_secret("did:example:alice".to_string(), alice_secret);
let bob_secret = create_test_secret("did:example:bob", "bob-key");
bob_builder = bob_builder.add_secret("did:example:bob".to_string(), bob_secret);
let alice_key_manager = alice_builder
.build()
.expect("Failed to build Alice's key manager");
let bob_key_manager = bob_builder
.build()
.expect("Failed to build Bob's key manager");
let alice_config = AgentConfig::new("did:example:alice".to_string())
.with_security_mode("SIGNED")
.with_debug(true);
let bob_config = AgentConfig::new("did:example:bob".to_string())
.with_security_mode("SIGNED")
.with_debug(true);
let _alice = TapAgent::new(alice_config, Arc::new(alice_key_manager));
let _bob = TapAgent::new(bob_config, Arc::new(bob_key_manager));
let plain_message = PlainMessage {
id: "msg-123".to_string(),
typ: "application/didcomm-plain+json".to_string(),
type_: "example.message".to_string(),
body: serde_json::json!({"content": "Hello, Bob!"}),
from: "did:example:alice".to_string(),
to: vec!["did:example:bob".to_string()],
thid: None,
pthid: None,
created_time: Some(chrono::Utc::now().timestamp() as u64),
expires_time: None,
from_prior: None,
attachments: None,
extra_headers: std::collections::HashMap::new(),
};
let message_json = serde_json::to_string(&plain_message)?;
println!("Original message: {}", message_json);
sleep(Duration::from_secs(1)).await;
Ok(())
}
fn create_test_secret(did: &str, key_id: &str) -> Secret {
Secret {
id: did.to_string(),
type_: SecretType::JsonWebKey2020,
secret_material: SecretMaterial::JWK {
private_key_jwk: serde_json::json!({
"kty": "OKP",
"crv": "Ed25519",
"x": "base64-encoded-public-key",
"d": "base64-encoded-private-key",
"kid": format!("{}#{}", did, key_id)
}),
},
}
}