1pub mod api;
34pub mod client;
35pub mod config;
36pub mod error;
37pub mod logging;
38pub mod models;
39pub mod nonce;
40pub mod signers;
41
42pub use api::*;
43pub use client::*;
44pub use config::Config;
45pub use error::{LighterError, Result};
46pub use logging::{init_logging, init_logging_with_filter};
47pub use models::*;
48pub use signers::*;
49
50use crate::client::{ApiClient, SignerClient};
51
52#[derive(Debug)]
54pub struct LighterClient {
55 account_api: AccountApi,
56 order_api: OrderApi,
57 transaction_api: TransactionApi,
58 candlestick_api: CandlestickApi,
59 ws_client: WebSocketClient,
60}
61
62impl LighterClient {
63 pub fn new(config: Config, private_key: &str) -> Result<Self> {
65 let api_client = ApiClient::new(config.clone())?;
66 let signer_client = SignerClient::with_ethereum_signer(api_client, private_key)?;
67 let ws_client = WebSocketClient::new(config);
68
69 Ok(Self {
70 account_api: AccountApi::new(signer_client.clone()),
71 order_api: OrderApi::new(signer_client.clone()),
72 transaction_api: TransactionApi::new(signer_client.clone()),
73 candlestick_api: CandlestickApi::new(signer_client),
74 ws_client,
75 })
76 }
77
78 pub fn from_mnemonic(config: Config, mnemonic: &str, account_index: u32) -> Result<Self> {
80 let api_client = ApiClient::new(config.clone())?;
81 let ethereum_signer = signers::EthereumSigner::from_mnemonic(mnemonic, account_index)?;
82 let signer_client = SignerClient::new(api_client, std::sync::Arc::new(ethereum_signer));
83 let ws_client = WebSocketClient::new(config);
84
85 Ok(Self {
86 account_api: AccountApi::new(signer_client.clone()),
87 order_api: OrderApi::new(signer_client.clone()),
88 transaction_api: TransactionApi::new(signer_client.clone()),
89 candlestick_api: CandlestickApi::new(signer_client),
90 ws_client,
91 })
92 }
93
94 pub fn new_read_only(config: Config) -> Result<Self> {
96 let api_client = ApiClient::new(config.clone())?;
97 let ws_client = WebSocketClient::new(config);
98
99 let dummy_signer = signers::EthereumSigner::from_private_key(
101 "0000000000000000000000000000000000000000000000000000000000000001",
102 )?;
103 let signer_client = SignerClient::new(api_client, std::sync::Arc::new(dummy_signer));
104
105 Ok(Self {
106 account_api: AccountApi::new(signer_client.clone()),
107 order_api: OrderApi::new(signer_client.clone()),
108 transaction_api: TransactionApi::new(signer_client.clone()),
109 candlestick_api: CandlestickApi::new(signer_client),
110 ws_client,
111 })
112 }
113
114 pub fn account(&self) -> &AccountApi {
116 &self.account_api
117 }
118
119 pub fn orders(&self) -> &OrderApi {
121 &self.order_api
122 }
123
124 pub fn transactions(&self) -> &TransactionApi {
126 &self.transaction_api
127 }
128
129 pub fn market_data(&self) -> &CandlestickApi {
131 &self.candlestick_api
132 }
133
134 pub fn websocket(&mut self) -> &mut WebSocketClient {
136 &mut self.ws_client
137 }
138}