Skip to main content

NodeClient

Struct NodeClient 

Source
pub struct NodeClient { /* private fields */ }

Implementations§

Source§

impl NodeClient

Source

pub fn create_alias<T>( &self, alias: Alias<T>, scope: Option<T::Scope>, value: T, ) -> Result<()>
where T: Aliasable<Scope: StoreScopeCompat> + AsRef<[u8; 32]>,

Source

pub fn delete_alias<T>( &self, alias: Alias<T>, scope: Option<T::Scope>, ) -> Result<()>
where T: Aliasable<Scope: StoreScopeCompat>,

Source

pub fn lookup_alias<T>( &self, alias: Alias<T>, scope: Option<T::Scope>, ) -> Result<Option<T>>
where T: Aliasable<Scope: StoreScopeCompat> + From<[u8; 32]>,

Source

pub fn resolve_alias<T>( &self, alias: Alias<T>, scope: Option<T::Scope>, ) -> Result<Option<T>>
where T: Aliasable<Scope: StoreScopeCompat> + From<[u8; 32]> + FromStr<Err: Into<Report>>,

Source

pub fn list_aliases<T>( &self, scope: Option<T::Scope>, ) -> Result<Vec<(Alias<T>, T, Option<T::Scope>)>>

Source§

impl NodeClient

Source

pub fn get_application( &self, application_id: &ApplicationId, ) -> Result<Option<Application>>

Source

pub async fn get_application_bytes( &self, application_id: &ApplicationId, ) -> Result<Option<Arc<[u8]>>>

Source

pub fn has_application(&self, application_id: &ApplicationId) -> Result<bool>

Source

pub fn install_application( &self, blob_id: &BlobId, size: u64, source: &ApplicationSource, metadata: Vec<u8>, package: &str, version: &str, signer_id: Option<&str>, is_bundle: bool, ) -> Result<ApplicationId>

Source

pub async fn install_application_from_path( &self, path: Utf8PathBuf, metadata: Vec<u8>, package: Option<String>, version: Option<String>, ) -> Result<ApplicationId>

Source

pub async fn install_application_from_url( &self, url: Url, metadata: Vec<u8>, expected_hash: Option<&Hash>, ) -> Result<ApplicationId>

Source

pub fn is_bundle_blob(blob_bytes: &[u8]) -> bool

Check if a blob contains a bundle archive by peeking at the first few entries. This is a lightweight check that only reads the archive structure, not the full content.

Returns true if manifest.json is found, false otherwise. Logs warnings for parsing errors to help diagnose corrupted bundles.

Source

pub async fn install_application_from_bundle_blob( &self, blob_id: &BlobId, source: &ApplicationSource, ) -> Result<ApplicationId>

Install an application from a bundle blob that’s already in the blobstore. This is used when a bundle blob is received via blob sharing or discovery. No metadata needed - bundle detection happens via is_bundle_blob()

Source

pub fn uninstall_application( &self, application_id: &ApplicationId, ) -> Result<()>

Source

pub fn list_applications(&self) -> Result<Vec<Application>>

Source

pub fn update_compiled_app( &self, application_id: &ApplicationId, compiled_blob_id: &BlobId, ) -> Result<()>

Source

pub fn list_packages(&self) -> Result<Vec<String>>

List all packages

Source

pub fn list_versions(&self, package: &str) -> Result<Vec<String>>

List all versions of a package

Source

pub fn get_latest_version( &self, package: &str, ) -> Result<Option<(String, ApplicationId)>>

Get the latest version of a package (version string and application id)

Source

pub async fn install_by_package_version( &self, _package: &str, _version: &str, source: &ApplicationSource, metadata: Vec<u8>, ) -> Result<ApplicationId>

Install application by package and version

Source§

impl NodeClient

Source

pub async fn add_blob<S: AsyncRead>( &self, stream: S, expected_size: Option<u64>, expected_hash: Option<&Hash>, ) -> Result<(BlobId, u64)>

Source

pub async fn get_blob<'a>( &'a self, blob_id: &'a BlobId, context_id: Option<&'a ContextId>, ) -> Result<Option<Blob>>

Get blob from local storage or network if context_id is provided Returns a streaming Blob that can be used to read the data

Source

pub async fn get_blob_bytes( &self, blob_id: &BlobId, context_id: Option<&ContextId>, ) -> Result<Option<Arc<[u8]>>>

Get blob bytes from local storage with actor-based caching Falls back to network download if context_id is provided and blob not found locally

Source

pub async fn find_blob_providers( &self, blob_id: &BlobId, context_id: &ContextId, ) -> Result<Vec<PeerId>>

Query the network for peers that have a specific blob

Source

pub async fn announce_blob_to_network( &self, blob_id: &BlobId, context_id: &ContextId, size: u64, ) -> Result<()>

Announce a blob to the network for discovery

Source

pub fn has_blob(&self, blob_id: &BlobId) -> Result<bool>

Source

pub fn list_blobs(&self) -> Result<Vec<BlobInfo>>

List all root blobs

Returns a list of all root blob IDs and their metadata. Root blobs are either:

  • Blobs that contain links to chunks (segmented large files)
  • Standalone blobs that aren’t referenced as chunks by other blobs This excludes individual chunk blobs to provide a cleaner user experience.
Source

pub async fn delete_blob(&self, blob_id: BlobId) -> Result<bool>

Delete a blob by its ID

Removes blob metadata from database and deletes the actual blob files. This includes all associated chunk files for large blobs.

Source

pub async fn get_blob_info( &self, blob_id: BlobId, ) -> Result<Option<BlobMetadata>>

Get blob metadata

Returns blob metadata including size, hash, and detected MIME type. This is efficient for checking blob existence and getting metadata info.

Source

pub async fn detect_blob_mime_type(&self, blob_id: BlobId) -> Option<String>

Detect MIME type by reading the first few bytes of a blob

Source

pub fn find_owned_identity( &self, context_id: &ContextId, ) -> Result<Option<(PublicKey, PrivateKey)>>

Helper to find an identity in the datastore for which the node possesses the private key.

Source

pub fn create_blob_auth( &self, blob_id: &BlobId, context_id: &ContextId, public_key: PublicKey, private_key: &PrivateKey, ) -> Result<BlobAuth>

Generates the BlobAuth authentication structure by creating a payload envelope and signing it.

§Arguments
  • blob_id - The ID of the blob being requested.
  • context_id - The context context the blob belongs to.
  • public_key - The public key of the requester that is a member of the context.
  • private_key - The private key used to sign the request.
Source

pub fn create_blob_auth_for_context( &self, context_id: &ContextId, blob_id: &BlobId, ) -> Result<Option<BlobAuth>>

A helper function that finds identity from store and creates blob authentication struct.

Attempts to find a local identity for the context. If found, generates a signature. If not found, returns None (which implies a public access request).

§Returns
  • Ok(Some(blob_auth)) - if the local identity was found and blob authentication struct was successfully created.
  • Ok(None) - if the node doesn’t own any identity for the given context.
  • Err - if some internal error occured (e.g. DB error, serialization, etc).
Source§

impl NodeClient

Source

pub fn new( datastore: Store, blobstore: BlobManager, network_client: NetworkClient, node_manager: LazyRecipient<NodeMessage>, event_sender: Sender<NodeEvent>, ctx_sync_tx: Sender<(Option<ContextId>, Option<PeerId>)>, specialized_node_invite_topic: String, ) -> Self

Source

pub async fn subscribe(&self, context_id: &ContextId) -> Result<()>

Source

pub async fn unsubscribe(&self, context_id: &ContextId) -> Result<()>

Source

pub async fn get_peers_count(&self, context: Option<&ContextId>) -> usize

Source

pub async fn broadcast( &self, context: &Context, sender: &PublicKey, sender_key: &PrivateKey, artifact: Vec<u8>, delta_id: [u8; 32], parent_ids: Vec<[u8; 32]>, hlc: HybridTimestamp, events: Option<Vec<u8>>, ) -> Result<()>

Source

pub async fn broadcast_heartbeat( &self, context_id: &ContextId, root_hash: Hash, dag_heads: Vec<[u8; 32]>, ) -> Result<()>

Source

pub async fn broadcast_specialized_node_invite( &self, context_id: ContextId, inviter_id: PublicKey, ) -> Result<[u8; 32]>

Broadcast a specialized node invite discovery to the global invite topic.

This broadcasts a discovery message and registers a pending invite so that when a specialized node responds with verification, the node can create an invitation.

§Arguments
  • context_id - The context to invite specialized nodes to
  • inviter_id - The identity performing the invitation
  • invite_topic - The global topic name for specialized node invite discovery
§Returns

The nonce used in the request

Source

pub fn send_event(&self, event: NodeEvent) -> Result<()>

Source

pub fn receive_events(&self) -> impl Stream<Item = NodeEvent>

Source

pub async fn sync( &self, context_id: Option<&ContextId>, peer_id: Option<&PeerId>, ) -> Result<()>

Trait Implementations§

Source§

impl Clone for NodeClient

Source§

fn clone(&self) -> NodeClient

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for NodeClient

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Reflect for T

Source§

fn as_dyn_ref<'a>(&self) -> &(dyn Reflect + 'a)
where T: 'a,

Source§

fn as_dyn_mut<'a>(&mut self) -> &mut (dyn Reflect + 'a)
where T: 'a,

Source§

fn as_dyn_box<'a>(self: Box<T>) -> Box<dyn Reflect + 'a>
where T: 'a,

Source§

fn as_dyn_rc<'a>(self: Rc<T>) -> Rc<dyn Reflect + 'a>
where T: 'a,

Source§

fn as_dyn_arc<'a>(self: Arc<T>) -> Arc<dyn Reflect + 'a>
where T: 'a,

Source§

fn type_id(&self) -> TypeId

Source§

fn type_name(&self) -> &'static str

Source§

impl<T> ReflectExt for T
where T: Reflect + ?Sized,

Source§

fn is<T>(&self) -> bool
where T: Reflect + ?Sized,

Source§

fn type_id() -> TypeId

Source§

fn downcast_ref<T>(&self) -> Option<&T>
where T: Reflect,

Source§

fn downcast_mut<T>(&mut self) -> Option<&mut T>
where T: Reflect,

Source§

fn downcast_box<T>(self: Box<Self>) -> Result<Box<T>, Box<Self>>
where T: Reflect,

Source§

fn downcast_rc<T>(self: Rc<Self>) -> Result<Rc<T>, Rc<Self>>
where T: Reflect,

Source§

fn downcast_arc<T>(self: Arc<Self>) -> Result<Arc<T>, Arc<Self>>
where T: Reflect,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,