use crate::dto::{
prelude::*,
rpc::{Request, Response},
};
pub mod proof;
pub use proof::{DelegatedGrant, DelegatedGrantProof, DelegatedGrantScope, RoleAttestationProof};
pub const CAPABILITY_VERSION_V1: u16 = 1;
pub const PROOF_VERSION_V1: u16 = 1;
#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
pub enum CapabilityService {
Root,
}
#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
pub struct CapabilityRequestMetadata {
pub request_id: [u8; 16],
pub nonce: [u8; 16],
pub issued_at: u64,
pub ttl_seconds: u32,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
pub struct CapabilityProofBlob {
pub proof_version: u16,
pub capability_hash: [u8; 32],
pub payload: Vec<u8>,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
pub enum CapabilityProof {
Structural,
RoleAttestation(CapabilityProofBlob),
DelegatedGrant(CapabilityProofBlob),
}
#[derive(CandidType, Clone, Debug, Deserialize)]
pub struct RootCapabilityEnvelopeV1 {
pub service: CapabilityService,
pub capability_version: u16,
pub capability: Request,
pub proof: CapabilityProof,
pub metadata: CapabilityRequestMetadata,
}
#[derive(CandidType, Clone, Debug, Deserialize)]
pub struct RootCapabilityResponseV1 {
pub response: Response,
}