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}
25
26impl LNBitsClient {
27 pub fn new(
29 _wallet_id: &str,
31 admin_key: &str,
32 invoice_read_key: &str,
33 lnbits_url: &str,
34 tor_socket: Option<&str>,
35 ) -> Result<LNBitsClient> {
36 let lnbits_url = Url::parse(lnbits_url)?;
37
38 let client = {
39 if let Some(tor_socket) = tor_socket {
40 let proxy = reqwest::Proxy::all(tor_socket).expect("tor proxy should be there");
41 reqwest::Client::builder().proxy(proxy).build()?
42 } else {
43 reqwest::Client::builder().build()?
44 }
45 };
46
47 let (_sender, receiver) = tokio::sync::mpsc::channel(8);
48
49 Ok(LNBitsClient {
50 admin_key: admin_key.to_string(),
52 invoice_read_key: invoice_read_key.to_string(),
53 lnbits_url,
54 reqwest_client: client,
56 receiver: Arc::new(Mutex::new(receiver)),
57 })
58 }
59
60 pub fn receiver(&self) -> Arc<Mutex<tokio::sync::mpsc::Receiver<String>>> {
62 self.receiver.clone()
63 }
64}