cdk_mintd/env_vars/
cln.rs1use std::env;
4use std::path::PathBuf;
5
6use crate::config::Cln;
7
8pub const ENV_CLN_RPC_PATH: &str = "CDK_MINTD_CLN_RPC_PATH";
10pub const ENV_CLN_BOLT12: &str = "CDK_MINTD_CLN_BOLT12";
11pub const ENV_CLN_FEE_PERCENT: &str = "CDK_MINTD_CLN_FEE_PERCENT";
12pub const ENV_CLN_RESERVE_FEE_MIN: &str = "CDK_MINTD_CLN_RESERVE_FEE_MIN";
13pub const ENV_CLN_EXPOSE_PRIVATE_CHANNELS: &str = "CDK_MINTD_CLN_EXPOSE_PRIVATE_CHANNELS";
14
15impl Cln {
16 pub fn from_env(mut self) -> Self {
17 if let Ok(path) = env::var(ENV_CLN_RPC_PATH) {
19 self.rpc_path = PathBuf::from(path);
20 }
21
22 if let Ok(bolt12_str) = env::var(ENV_CLN_BOLT12) {
24 if let Ok(bolt12) = bolt12_str.parse() {
25 self.bolt12 = bolt12;
26 }
27 }
28
29 if let Ok(expose_str) = env::var(ENV_CLN_EXPOSE_PRIVATE_CHANNELS) {
31 if let Ok(expose) = expose_str.parse() {
32 self.expose_private_channels = expose;
33 }
34 }
35
36 if let Ok(fee_str) = env::var(ENV_CLN_FEE_PERCENT) {
38 if let Ok(fee) = fee_str.parse() {
39 self.fee_percent = fee;
40 }
41 }
42
43 if let Ok(reserve_fee_str) = env::var(ENV_CLN_RESERVE_FEE_MIN) {
45 if let Ok(reserve_fee) = reserve_fee_str.parse::<u64>() {
46 self.reserve_fee_min = reserve_fee.into();
47 }
48 }
49
50 self
51 }
52}
53
54#[cfg(all(test, feature = "sqlite"))]
55mod tests {
56 use std::path::{Path, PathBuf};
57 use std::sync::Arc;
58
59 use cdk::cdk_payment::MintPayment;
60 use cdk::nuts::CurrencyUnit;
61 use cdk_sqlite::mint::memory;
62
63 use super::*;
64 use crate::config::Settings;
65 use crate::setup::PaymentBackendSetup;
66
67 #[tokio::test]
68 async fn bolt12_false_removes_bolt12_from_cln_capabilities() {
69 let config = {
70 let _guard = crate::test_utils::env_lock();
71 let previous_bolt12 = std::env::var_os(ENV_CLN_BOLT12);
72 std::env::set_var(ENV_CLN_BOLT12, "false");
73
74 let config = Cln {
75 rpc_path: PathBuf::from("/nonexistent/lightning-rpc"),
76 ..Default::default()
77 }
78 .from_env();
79
80 match previous_bolt12 {
81 Some(value) => std::env::set_var(ENV_CLN_BOLT12, value),
82 None => std::env::remove_var(ENV_CLN_BOLT12),
83 }
84
85 config
86 };
87 assert!(!config.bolt12, "the environment override must be applied");
88
89 let kv_store = Arc::new(memory::empty().await.expect("in-memory database"));
90 let backend = config
91 .setup(
92 &Settings::default(),
93 CurrencyUnit::Sat,
94 None,
95 Path::new("."),
96 Some(kv_store),
97 )
98 .await
99 .expect("CLN setup does not connect eagerly");
100
101 let capabilities = backend.get_settings().await.expect("CLN capabilities");
102 assert!(
103 capabilities.bolt12.is_none(),
104 "CDK_MINTD_CLN_BOLT12=false must disable BOLT12 capabilities"
105 );
106 }
107}