Skip to main content

appcore_update/
lib.rs

1// =============================================================================
2//        #######
3//     ###       ###     F: lib.rs
4//    ##   ## ##   ##    P: AppCore-Runtime
5//         ## ##
6//                       C: 2026/07/22 13:21:42 by dnettoRaw
7//    ##   ## ##   ##    U: 2026/08/02 13:24:05 by dnettoRaw
8//      ###########      S: 1.0.1-rc.8
9// =============================================================================
10
11//! Application artifact update, activation and rollback lifecycle.
12//!
13//! The Runtime treats artifacts as opaque bytes. It verifies generic identity,
14//! compatibility and integrity but never knows application code or business
15//! data.
16
17#![deny(missing_docs)]
18
19mod activation;
20mod artifact;
21mod authenticity;
22mod cache;
23mod catalog;
24mod catalog_store;
25mod coordinator;
26mod error;
27mod filesystem;
28mod host_flow;
29mod integrity;
30mod mobile;
31mod peer;
32mod provider;
33mod quarantine;
34mod recovery;
35mod store;
36mod store_io;
37mod stream;
38
39pub use activation::{ActivationAdapter, ActivationEvidence, ActivationRequest};
40pub use artifact::{ArtifactDescriptor, ArtifactTarget};
41#[cfg(feature = "allow-unsigned-local-artifacts")]
42pub use authenticity::UnsignedLocalArtifactVerifier;
43pub use authenticity::{
44    artifact_signing_payload, ArtifactAuthenticityVerifier, ArtifactTrustPolicy,
45    Ed25519ArtifactVerifier, PolicyArtifactVerifier, SigningKeyStatus,
46};
47pub use cache::{CacheOptions, CachedArtifact, UpdateCache};
48pub use catalog::{
49    LatestCompatibleUpdateIdentity, QuarantineExclusion, QuarantineSelection, ReleaseCatalog,
50    UpdateIdentity, RELEASE_CATALOG_MAX_BYTES, RELEASE_CATALOG_MAX_ENTRIES,
51};
52pub use catalog_store::{CatalogEntry, ReleaseCatalogStore};
53pub use coordinator::{
54    ActivationHealthCheck, NoUpdateFaults, UpdateCoordinator, UpdateFaultInjector,
55    UpdateFaultPoint, UpdateOutcome, UpdatePreparation, UpdateStaging,
56};
57pub use error::{UpdateError, UpdateResult};
58pub use mobile::{
59    MobileUpdateAction, MobileUpdateDecision, MobileUpdatePolicy, MobileUpdateRequest,
60};
61pub use peer::{
62    ArtifactChunkRequestV2, ArtifactChunkResponseV2, ArtifactOfferRequestV2,
63    ArtifactOfferResponseV2, ArtifactPeerStatusV2, LatestCompatibleOfferRequestV2,
64    LatestCompatibleOfferResponseV2, UPDATE_CHUNK_CAPABILITY, UPDATE_OFFER_CAPABILITY,
65    UPDATE_PEER_METADATA_MAX_BYTES,
66};
67pub use provider::{
68    FileUpdateProvider, FileUpdateProviderFactory, SharedUpdateProvider, UpdateProvider,
69    UpdateRequest, FILE_UPDATE_PROVIDER_ID,
70};
71pub use quarantine::{
72    QuarantineKey, QuarantineReason, QuarantineRecord, QuarantineState, QuarantineStore,
73    QUARANTINE_FORMAT_VERSION, QUARANTINE_MAX_ENTRIES,
74};
75pub use recovery::{
76    ActivationPhaseV2, ActivationReceiptV2, FileRecoveryStore, RecoveryAction, RecoveryDecision,
77    RecoveryResult, ACTIVATION_V2_FORMAT_VERSION,
78};
79pub use store::{
80    ActivationReceipt, ArtifactStore, FileArtifactStore, StagedArtifact,
81    UPDATE_METADATA_FORMAT_VERSION,
82};
83pub use stream::{
84    receive_artifact, ArtifactSource, ArtifactTransferPolicy, ArtifactWriter, FileArtifactSource,
85    DEFAULT_ARTIFACT_CHUNK_BYTES,
86};
87
88pub(crate) use integrity::sha256_hex;
89
90#[cfg(test)]
91mod tests;
92
93pub use host_flow::{HostUpdateFlow, UpdateRecoveryGate};