use crate::NameSystemClient;
use anyhow;
use libp2p::{
multiaddr::{Multiaddr, Protocol},
PeerId,
};
use noosphere_core::authority::{SphereAction, SphereReference};
use serde_json;
use tokio::time;
use ucan::capability::{Capability, Resource, With};
#[cfg(doc)]
use cid::Cid;
pub fn generate_capability(identity: &str) -> Capability<SphereReference, SphereAction> {
Capability {
with: With::Resource {
kind: Resource::Scoped(SphereReference {
did: identity.to_owned(),
}),
},
can: SphereAction::Publish,
}
}
pub fn generate_fact(address: &str) -> serde_json::Value {
serde_json::json!({ "link": address })
}
pub async fn wait_for_peers<T: NameSystemClient>(
client: &T,
requested_peers: usize,
) -> anyhow::Result<()> {
loop {
let peers = client.peers().await?;
if peers.len() >= requested_peers {
return Ok(());
}
time::sleep(time::Duration::from_secs(1)).await;
}
}
pub(crate) fn make_p2p_address(mut addr: Multiaddr, peer_id: PeerId) -> Multiaddr {
addr.push(Protocol::P2p(peer_id.into()));
addr
}