mdk-core 0.8.0

A simplified interface to build secure messaging apps on nostr with MLS.
//! MDK Public Prelude
//!
//! This module provides the essential types that MDK users need to work with the library.
//! It includes MDK's own types, storage traits, and a narrow slice of dependency types
//! that appear in MDK's public API (e.g., `GroupId`, `ProposalType`). Dependencies
//! needed only for advanced use cases (custom providers, raw MLS inspection, direct
//! `nostr` event construction) should still be imported directly by users.
//!
//! ## Usage
//!
//! ```rust
//! use mdk_core::prelude::*;
//! use mdk_memory_storage::MdkMemoryStorage;
//! use nostr::{EventBuilder, Keys, Kind}; // Import nostr types directly
//!
//! let mdk = MDK::new(MdkMemoryStorage::default());
//! ```

// === Core MDK Types ===
/// MDK error type
pub use crate::Error;
/// The main MDK struct for Marmot protocol operations
pub use crate::MDK;
/// MDK provider for OpenMLS integration
pub use crate::MdkProvider;
/// MDK group identifier
pub use mdk_storage_traits::GroupId;

// === MDK Result Types ===
/// Nostr group data extension
pub use crate::extension::NostrGroupDataExtension;
/// Group operation results
pub use crate::groups::{
    CapabilityUpgradeStatus, GroupResult, LeafNodeInfo, MemberCapabilities, NostrGroupConfigData,
    NostrGroupDataUpdate, PendingMemberChanges, ProposalUpgradability, RatchetTreeInfo,
    UpdateGroupResult,
};
/// Allowed tags for the outer kind:445 wrapper event
pub use crate::messages::EventTag;
/// Message processing result variants
pub use crate::messages::{
    MessageProcessingContext, MessageProcessingOutcome, MessageProcessingResult,
};
/// MIP-05 primitives and helpers
#[cfg(feature = "mip05")]
#[cfg_attr(docsrs, doc(cfg(feature = "mip05")))]
pub use crate::mip05::{
    EncryptedToken, LeafTokenTag, Mip05Error, Mip05GroupMessage, NotificationEventBatch,
    NotificationPlatform, NotificationRequest, PushTokenPlaintext, TokenListResponse, TokenRemoval,
    TokenRequest, TokenTag,
};
/// Welcome operation results
pub use crate::welcomes::{JoinedGroupResult, WelcomePreview};

// === Storage Traits (users need these to provide storage implementations) ===
pub use mdk_storage_traits::{Backend, MdkStorageProvider};

// === Storage Type Aliases (convenient for users working with storage) ===
pub use mdk_storage_traits::groups::types as group_types;
pub use mdk_storage_traits::messages::types as message_types;
pub use mdk_storage_traits::welcomes::types as welcome_types;

// === Dependency types surfaced in MDK's public API ===
// A dependency type belongs here only if it appears in the signature of an
// MDK public method or public struct field. Types used only internally, or
// only by advanced callers (custom providers, raw MLS inspection, KeyPackage
// construction), stay behind a direct `openmls` dependency.

/// MLS extension-type registry. Carried on `MemberCapabilities`.
pub use openmls::prelude::ExtensionType;
/// MLS proposal-type registry. Returned by `MDK::group_required_proposals`
/// and carried on `MemberCapabilities`.
pub use openmls::prelude::ProposalType;
/// MLS ciphersuite registry. Carried on `MemberCapabilities`.
pub use openmls::prelude::VerifiableCiphersuite;