1#![doc = include_str!("../README.md")]
2#![warn(missing_docs)]
3#![warn(rustdoc::bare_urls)]
4
5use std::sync::Arc;
6
7use anyhow::Result;
8use reqwest::Url;
9use tokio::sync::Mutex;
10
11pub mod api;
12
13#[derive(Clone)]
14pub struct LNBitsClient {
16 admin_key: String,
18 invoice_read_key: String,
19 lnbits_url: Url,
20 reqwest_client: reqwest::Client,
22 receiver: Arc<Mutex<tokio::sync::mpsc::Receiver<String>>>,
24 sender: tokio::sync::mpsc::Sender<String>,
26}
27
28impl LNBitsClient {
29 pub fn new(
31 _wallet_id: &str,
33 admin_key: &str,
34 invoice_read_key: &str,
35 lnbits_url: &str,
36 tor_socket: Option<&str>,
37 ) -> Result<LNBitsClient> {
38 let lnbits_url = Url::parse(lnbits_url)?;
39
40 let client = {
41 if let Some(tor_socket) = tor_socket {
42 let proxy = reqwest::Proxy::all(tor_socket).expect("tor proxy should be there");
43 reqwest::Client::builder().proxy(proxy).build()?
44 } else {
45 reqwest::Client::builder().build()?
46 }
47 };
48
49 let (sender, receiver) = tokio::sync::mpsc::channel(8);
50
51 Ok(LNBitsClient {
52 admin_key: admin_key.to_string(),
54 invoice_read_key: invoice_read_key.to_string(),
55 lnbits_url,
56 reqwest_client: client,
58 sender,
59 receiver: Arc::new(Mutex::new(receiver)),
60 })
61 }
62
63 pub fn receiver(&self) -> Arc<Mutex<tokio::sync::mpsc::Receiver<String>>> {
65 self.receiver.clone()
66 }
67}