iota_grpc_client/
lib.rs

1// Copyright (c) 2025 IOTA Stiftung
2// SPDX-License-Identifier: Apache-2.0
3
4//! gRPC client for IOTA node operations.
5//!
6//! This crate provides a high-level client for interacting with IOTA nodes
7//! via gRPC. It wraps the low-level proto types and provides ergonomic APIs
8//! using SDK types from `iota_sdk_types`.
9//!
10//! # Example
11//!
12//! ```no_run
13//! use iota_grpc_client::Client;
14//! use iota_sdk_types::{Digest, ObjectId};
15//!
16//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
17//! let client = Client::connect("http://localhost:9000").await?;
18//!
19//! // Get a transaction with full details (None = use default field mask)
20//! let digest: Digest = todo!();
21//! let txs = client.get_transactions(&[digest], None).await?;
22//! if let Some(tx) = txs.body().first() {
23//!     println!("Transaction digest: {:?}", tx.transaction()?.digest()?);
24//! }
25//!
26//! // Get an object (None = use default field mask)
27//! let object_id: ObjectId = "0x2".parse()?;
28//! let objects = client.get_objects(&[(object_id, None)], None).await?;
29//! if let Some(object) = objects.body().first() {
30//!     println!("Object version: {:?}", object.object_reference()?.version());
31//! }
32//! # Ok(())
33//! # }
34//! ```
35
36pub mod api;
37
38// Re-export all read mask constants (per-method fields)
39pub use api::{
40    // CheckpointResponse per-method masks
41    CHECKPOINT_CONTENTS_BCS,
42    CHECKPOINT_CONTENTS_DIGEST,
43    CHECKPOINT_RESPONSE_CHECKPOINT_DATA,
44    CHECKPOINT_RESPONSE_CONTENTS,
45    CHECKPOINT_RESPONSE_EVENTS,
46    CHECKPOINT_RESPONSE_EXECUTED_TRANSACTIONS,
47    CHECKPOINT_RESPONSE_SIGNATURE,
48    CHECKPOINT_RESPONSE_SIGNED_SUMMARY,
49    CHECKPOINT_RESPONSE_SUMMARY,
50    CHECKPOINT_SUMMARY_BCS,
51    CHECKPOINT_SUMMARY_DIGEST,
52    // Event per-method masks
53    EVENT_BCS,
54    EVENT_BCS_CONTENTS,
55    EVENT_JSON_CONTENTS,
56    EVENT_MODULE,
57    EVENT_PACKAGE_ID,
58    EVENT_SENDER,
59    EVENT_TYPE,
60    // ExecutedTransaction per-method masks
61    EXECUTED_TRANSACTION_CHECKPOINT,
62    EXECUTED_TRANSACTION_EFFECTS,
63    EXECUTED_TRANSACTION_EVENTS,
64    EXECUTED_TRANSACTION_INPUT_OBJECTS,
65    EXECUTED_TRANSACTION_OUTPUT_OBJECTS,
66    EXECUTED_TRANSACTION_SIGNATURES,
67    EXECUTED_TRANSACTION_TIMESTAMP,
68    EXECUTED_TRANSACTION_TRANSACTION,
69    // ExecutionError sub-fields
70    EXECUTION_ERROR_BCS_KIND,
71    EXECUTION_ERROR_COMMAND_INDEX,
72    EXECUTION_ERROR_SOURCE,
73    // Object per-method masks
74    OBJECT_BCS,
75    OBJECT_REFERENCE,
76    // SimulatedTransaction per-method masks
77    SIMULATED_TRANSACTION_EXECUTED_TRANSACTION,
78    SIMULATED_TRANSACTION_EXECUTION_RESULT,
79    SIMULATED_TRANSACTION_SUGGESTED_GAS_PRICE,
80    // Transaction / Effects / Events sub-fields
81    TRANSACTION_BCS,
82    TRANSACTION_DIGEST,
83    TRANSACTION_EFFECTS_BCS,
84    TRANSACTION_EFFECTS_DIGEST,
85    TRANSACTION_EVENTS_BCS,
86    TRANSACTION_EVENTS_DIGEST,
87};
88// Re-export types for convenience
89pub use api::{
90    CheckpointResponse, CheckpointStreamItem, Error, MetadataEnvelope, Page, Result, RpcStatus,
91    execution::simulate::SimulateTransactionInput,
92};
93// Re-export all read mask constants (endpoint defaults)
94pub use api::{
95    // Endpoint defaults
96    EXECUTE_TRANSACTIONS_READ_MASK,
97    GET_CHECKPOINT_READ_MASK,
98    GET_EPOCH_READ_MASK,
99    GET_OBJECTS_READ_MASK,
100    GET_SERVICE_INFO_READ_MASK,
101    GET_TRANSACTIONS_READ_MASK,
102    LIST_DYNAMIC_FIELDS_READ_MASK,
103    LIST_OWNED_OBJECTS_READ_MASK,
104    SIMULATE_TRANSACTIONS_READ_MASK,
105};
106// Re-export query builders for convenience
107pub use api::{
108    move_package::package_versions::ListPackageVersionsQuery,
109    state::{dynamic_fields::ListDynamicFieldsQuery, owned_objects::ListOwnedObjectsQuery},
110};
111
112mod client;
113pub use client::{Client, InterceptedChannel};
114
115mod response_ext;
116pub use response_ext::ResponseExt;
117
118mod interceptors;
119pub use interceptors::HeadersInterceptor;