1#[cfg(all(any(target_os = "android", target_os = "ios"), feature = "tls-native-roots"))]
36compile_error!("feature `tls-native-roots` can't be used on Android or iOS, use `tls-webpki-roots` instead");
37
38pub extern crate tonic;
39
40#[cfg(feature = "server")]
42include!(concat!(env!("OUT_DIR"), "/grpc_methods.rs"));
43
44mod convert;
45pub use crate::convert::{ConvertError, TryFromBytes};
46
47mod error;
48pub use crate::error::StatusExt;
49
50pub mod pver;
51
52pub mod client;
53pub mod protos {
55 pub mod core {
56 tonic::include_proto!("core");
57 }
58 pub use self::core::*;
59 pub mod bark_server {
60 tonic::include_proto!("bark_server");
61 }
62 pub use self::bark_server::*;
63 pub mod intman {
64 tonic::include_proto!("intman");
65 }
66 pub mod mailbox_server {
67 tonic::include_proto!("mailbox_server");
68 }
69}
70
71pub use client::ServerConnection;
72pub use crate::protos::bark_server::ark_service_client::ArkServiceClient;
73
74pub mod admin {
75 pub use crate::protos::bark_server::wallet_admin_service_client::WalletAdminServiceClient;
76 pub use crate::protos::bark_server::round_admin_service_client::RoundAdminServiceClient;
77 pub use crate::protos::bark_server::lightning_admin_service_client::LightningAdminServiceClient;
78 pub use crate::protos::bark_server::sweep_admin_service_client::SweepAdminServiceClient;
79 pub use crate::protos::bark_server::ban_admin_service_client::BanAdminServiceClient;
80 pub use crate::protos::bark_server::blocklist_admin_service_client::BlocklistAdminServiceClient;
81 pub use crate::protos::bark_server::nursery_admin_service_client::NurseryAdminServiceClient;
82}
83
84#[cfg(feature = "intman")]
85pub mod intman {
86 pub use crate::protos::intman::integration_service_client::IntegrationServiceClient;
87}
88
89#[cfg(feature = "server")]
90pub mod server {
91 pub use crate::protos::bark_server::ark_service_server::{ArkService, ArkServiceServer};
92 pub use crate::protos::bark_server::wallet_admin_service_server::{WalletAdminService, WalletAdminServiceServer};
93 pub use crate::protos::bark_server::round_admin_service_server::{RoundAdminService, RoundAdminServiceServer};
94 pub use crate::protos::bark_server::lightning_admin_service_server::{LightningAdminService, LightningAdminServiceServer};
95 pub use crate::protos::bark_server::sweep_admin_service_server::{SweepAdminService, SweepAdminServiceServer};
96 pub use crate::protos::bark_server::ban_admin_service_server::{BanAdminService, BanAdminServiceServer};
97 pub use crate::protos::bark_server::blocklist_admin_service_server::{BlocklistAdminService, BlocklistAdminServiceServer};
98 pub use crate::protos::bark_server::nursery_admin_service_server::{NurseryAdminService, NurseryAdminServiceServer};
99 pub use crate::protos::intman::integration_service_server::{IntegrationService, IntegrationServiceServer};
100 pub use crate::protos::mailbox_server::mailbox_service_server::{MailboxService, MailboxServiceServer};
101}
102
103pub mod mailbox {
104 pub use crate::protos::mailbox_server::mailbox_service_client::MailboxServiceClient;
105}
106
107
108use std::borrow::BorrowMut;
109use std::str::FromStr;
110use std::time::Duration;
111
112use bitcoin::{Address, Amount, OutPoint};
113use bitcoin::address::NetworkUnchecked;
114
115
116pub const MIN_PROTOCOL_VERSION: u64 = pver::PROTOCOL_VERSION_PPM_FEE_TOTAL;
120
121pub const MAX_PROTOCOL_VERSION: u64 = pver::PROTOCOL_VERSION_HASHLOCK_CLAUSES;
125
126pub const BARK_CRATE_VERSION: &str = env!("CARGO_PKG_VERSION");
130
131pub const PROTOCOL_VERSION_HEADER: &str = "pver";
133
134pub const MAX_NB_MAILBOX_RECOVERY_IDS: usize = 20;
136
137pub const RECOVERY_XPUB_CHUNK_SIZE: u32 = 10_000;
140
141pub const MAX_NB_FORFEIT_NONCE_IDS: usize = 1000;
143
144pub const MAX_NB_VTXO_IDS: usize = 1000;
146
147pub const MAX_NB_REGISTER_VTXOS: usize = 1000;
149
150pub const MAX_NB_MAILBOX_ARKOOR_VTXOS: usize = 100;
154
155pub const MAX_NB_BOARD_FUNDING_INPUTS: usize = 100;
157
158
159#[derive(Debug, Clone)]
160pub struct WalletStatus {
161 pub address: Address<NetworkUnchecked>,
162 pub total_balance: Amount,
163 pub trusted_balance: Amount,
164 pub untrusted_balance: Amount,
165 pub confirmed_utxos: Vec<OutPoint>,
166 pub unconfirmed_utxos: Vec<OutPoint>,
167}
168
169pub trait RequestExt<T>: BorrowMut<tonic::Request<T>> {
171 fn try_pver(&self) -> Result<Option<u64>, tonic::Status> {
175 self.borrow().metadata().get(PROTOCOL_VERSION_HEADER).map(|v| {
176 v.to_str().ok().and_then(|s| u64::from_str(s).ok())
177 .ok_or_else(|| tonic::Status::invalid_argument("invalid protocol version header"))
178 }).transpose()
179 }
180
181 fn pver(&self) -> Result<u64, tonic::Status> {
185 self.try_pver()?.ok_or_else(|| tonic::Status::invalid_argument("missing pver header"))
186 }
187
188 fn set_pver(&mut self, pver: u64) {
190 self.borrow_mut().metadata_mut().insert(PROTOCOL_VERSION_HEADER, pver.into());
191 }
192
193 fn set_default_timeout(&mut self, timeout: Duration) {
195 const GRPC_TIMEOUT_HEADER: &str = "grpc-timeout";
196
197 let slf = self.borrow_mut();
198 if slf.metadata().get(GRPC_TIMEOUT_HEADER).is_none () {
199 slf.set_timeout(timeout);
200 }
201 }
202}
203impl<T> RequestExt<T> for tonic::Request<T> {}