use super::{
change_id::JsChangeId, delegation::JsDelegation, event_handler::JsEventHandler,
signer::JsSigner,
};
use derive_more::{From, Into};
use dupe::Dupe;
use keyhive_core::{crypto::signed_ext::SignedSubjectId, principal::group::delegation::Delegation};
use keyhive_crypto::{signed::Signed, verifiable::Verifiable};
use std::sync::Arc;
use wasm_bindgen::prelude::*;
#[derive(Debug, Clone, Dupe, From, Into)]
#[wasm_bindgen(js_name = SignedDelegation)]
pub struct JsSignedDelegation(
pub(crate) Arc<Signed<Delegation<JsSigner, JsChangeId, JsEventHandler>>>,
);
#[wasm_bindgen(js_class = SignedDelegation)]
impl JsSignedDelegation {
pub fn verify(&self) -> bool {
self.0.try_verify().is_ok()
}
#[wasm_bindgen(getter)]
pub fn delegation(&self) -> JsDelegation {
self.0.payload().clone().into()
}
#[wasm_bindgen(getter, js_name = subjectId)]
pub fn subject_id(&self) -> super::identifier::JsIdentifier {
(*self.0).subject_id().into()
}
#[wasm_bindgen(getter, js_name = verifyingKey)]
pub fn verifying_key(&self) -> Vec<u8> {
self.0.verifying_key().to_bytes().to_vec()
}
#[wasm_bindgen(getter)]
pub fn signature(&self) -> Vec<u8> {
self.0.signature().to_vec()
}
}