Skip to main content

canic_core/api/
fleet_activation.rs

1//! Module: api::fleet_activation
2//!
3//! Responsibility: expose Fleet activation workflows and canonical evidence hashes.
4//! Does not own: evidence encoding, storage projection, phase validation, or authorization.
5//! Boundary: maps typed internal failures into Canic's public error contract.
6
7use crate::{
8    dto::{
9        error::Error,
10        fleet_activation::{
11            FleetActivationIdentity, FleetActivationRequest, FleetActivationResumeRequest,
12            FleetActivationStatusResponse, FleetCascadeActivationEvidence,
13            FleetCascadeManifestEntry, FleetCredentialGenerationRef,
14            FleetCredentialGenerationRequest, FleetCredentialManifest,
15        },
16        fleet_subnet_root::FleetSubnetRootAuthority,
17    },
18    ops::fleet_activation::FleetActivationEvidenceOps,
19    view::fleet_activation::FleetActivationTransition,
20    workflow::runtime::fleet_activation::FleetActivationWorkflow,
21};
22
23///
24/// FleetActivationApi
25///
26
27pub struct FleetActivationApi;
28
29impl FleetActivationApi {
30    /// Hash one canonical root cascade manifest for host/runtime evidence comparison.
31    pub fn cascade_manifest_hash(
32        manifest: &[FleetCascadeManifestEntry],
33    ) -> Result<[u8; 32], Error> {
34        FleetActivationEvidenceOps::cascade_manifest_hash(manifest).map_err(Error::from)
35    }
36
37    /// Hash one canonical credential manifest for host/runtime evidence comparison.
38    pub fn credential_manifest_hash(manifest: &FleetCredentialManifest) -> Result<[u8; 32], Error> {
39        FleetActivationEvidenceOps::credential_manifest_hash(manifest).map_err(Error::from)
40    }
41
42    /// Hash one Canister's exact activation identity and accepted evidence.
43    pub fn activation_evidence_hash(
44        identity: &FleetActivationIdentity,
45        cascade: &FleetCascadeActivationEvidence,
46        credential: FleetCredentialGenerationRef,
47    ) -> Result<[u8; 32], Error> {
48        FleetActivationEvidenceOps::activation_evidence_hash(identity, cascade, credential)
49            .map_err(Error::from)
50    }
51
52    pub fn status() -> Result<FleetActivationStatusResponse, Error> {
53        FleetActivationWorkflow::status().map_err(Error::from)
54    }
55
56    pub fn require_active() -> Result<(), Error> {
57        FleetActivationWorkflow::require_active().map_err(Error::from)
58    }
59
60    pub fn root_authority() -> Result<FleetSubnetRootAuthority, Error> {
61        FleetActivationWorkflow::root_authority().map_err(Error::from)
62    }
63
64    pub async fn prepare_root() -> Result<FleetActivationStatusResponse, Error> {
65        FleetActivationWorkflow::prepare_root()
66            .await
67            .map_err(Error::from)
68    }
69
70    pub async fn resume_root(
71        request: FleetActivationResumeRequest,
72    ) -> Result<FleetActivationTransition, Error> {
73        FleetActivationWorkflow::resume_root(request)
74            .await
75            .map_err(Error::from)
76    }
77
78    pub fn prepare_nonroot_credential_generation(
79        request: FleetCredentialGenerationRequest,
80    ) -> Result<FleetActivationStatusResponse, Error> {
81        FleetActivationWorkflow::prepare_nonroot_credential_generation(request).map_err(Error::from)
82    }
83
84    pub fn activate_nonroot(
85        request: FleetActivationRequest,
86    ) -> Result<FleetActivationTransition, Error> {
87        FleetActivationWorkflow::activate_nonroot(request).map_err(Error::from)
88    }
89}