use std::sync::Arc;
use crate::shared::rest::{
error::Result,
lnm::{base::LnmRestBase, rate_limit::RateLimiter},
};
pub(super) mod config;
pub(crate) mod error;
mod lnm;
pub(super) mod models;
pub(super) mod repositories;
use config::RestClientConfig;
use lnm::{
futures::LnmFuturesRepository, signature::SignatureGeneratorV2, user::LnmUserRepository,
};
use repositories::{FuturesRepository, UserRepository};
#[deprecated(
since = "0.1.0",
note = "LN Markets disabled the v2 REST API on Mar 31 2026. Retained for reference only. Use `lnm_sdk::api_v3::RestClient` instead."
)]
pub struct RestClient {
pub has_credentials: bool,
pub futures: Box<dyn FuturesRepository>,
pub user: Box<dyn UserRepository>,
}
#[allow(deprecated)]
impl RestClient {
fn new_inner(base: Arc<LnmRestBase<SignatureGeneratorV2>>) -> Arc<Self> {
let has_credentials = base.has_credentials();
let futures = Box::new(LnmFuturesRepository::new(base.clone()));
let user = Box::new(LnmUserRepository::new(base));
Arc::new(Self {
has_credentials,
futures,
user,
})
}
pub fn new(config: impl Into<RestClientConfig>, domain: impl ToString) -> Result<Arc<Self>> {
let config = config.into();
let rate_limiter = config
.rate_limiter_active()
.then(|| RateLimiter::from(&config));
let base = LnmRestBase::new(config.timeout(), domain.to_string(), rate_limiter)?;
Ok(Self::new_inner(base))
}
pub fn with_credentials(
config: impl Into<RestClientConfig>,
domain: impl ToString,
key: impl ToString,
secret: impl ToString,
passphrase: impl ToString,
) -> Result<Arc<Self>> {
let config = config.into();
let rate_limiter = config
.rate_limiter_active()
.then(|| RateLimiter::from(&config));
let base = LnmRestBase::with_credentials(
config.timeout(),
domain.to_string(),
key.to_string(),
passphrase.to_string(),
SignatureGeneratorV2::new(secret.to_string()),
rate_limiter,
)?;
Ok(Self::new_inner(base))
}
}