1use cloakpipe_audit::AuditLogger;
4use cloakpipe_core::{
5 config::CloakPipeConfig,
6 detector::Detector,
7 session::SessionManager,
8 vault::Vault,
9};
10use std::sync::Arc;
11use tokio::sync::Mutex;
12
13pub struct AppState {
15 pub config: CloakPipeConfig,
16 pub detector: Detector,
17 pub vault: Arc<Mutex<Vault>>,
18 pub audit: AuditLogger,
19 pub http_client: reqwest::Client,
20 pub api_key: String,
21 pub sessions: Arc<SessionManager>,
22}
23
24impl AppState {
25 pub fn new(
26 config: CloakPipeConfig,
27 detector: Detector,
28 vault: Vault,
29 audit: AuditLogger,
30 api_key: String,
31 ) -> Self {
32 let http_client = reqwest::Client::builder()
33 .timeout(std::time::Duration::from_secs(config.proxy.timeout_seconds))
34 .build()
35 .expect("Failed to build HTTP client");
36
37 let sessions = Arc::new(SessionManager::new(config.session.clone()));
38
39 Self {
40 config,
41 detector,
42 vault: Arc::new(Mutex::new(vault)),
43 audit,
44 http_client,
45 api_key,
46 sessions,
47 }
48 }
49}