1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// use crate::hdi_extensions::{
//     guest_error,
// };
use crate::hdk_extensions::{
    agent_id,
    must_get,
};

use deepkey::*;
use hdk::prelude::*;


#[hdk_extern]
pub fn get_device_key_links(author: AgentPubKey) -> ExternResult<Vec<Link>> {
    get_links(
        GetLinksInputBuilder::try_new(
            author,
            LinkTypes::DeviceToKeyAnchor,
        )?.build()
    )
}


#[hdk_extern]
pub fn get_device_keys(agent: Option<AgentPubKey>) -> ExternResult<Vec<(EntryHash, KeyAnchor)>> {
    Ok(
        get_device_key_links( agent.unwrap_or( agent_id()? ) )?
            .into_iter()
            .filter_map( |link| must_get( &link.target.into_any_dht_hash()? ).ok() )
            .filter_map( |record| Some((
                record.action().entry_hash()?.to_owned(),
                KeyAnchor::try_from( record ).ok()?,
            )))
            .collect()
    )
}