Skip to main content

agentmux_srv/server/service/
client.rs

1// Copyright 2025-2026, AgentMux Corp.
2// SPDX-License-Identifier: Apache-2.0
3
4//! `client` service handler.
5
6use crate::backend::obj::*;
7use crate::backend::service::{self, WebCallType, WebReturnType};
8use crate::backend::wcore;
9
10use super::super::AppState;
11
12pub(super) async fn handle_client_service(state: &AppState, call: &WebCallType) -> WebReturnType {
13    let store = &state.mstore;
14    let args = &call.args;
15    match call.method.as_str() {
16        "GetClientData" => match wcore::get_client(store) {
17            Ok(client) => {
18                WebReturnType::success(serde_json::to_value(&client).unwrap_or_default())
19            }
20            Err(e) => WebReturnType::error(e.to_string()),
21        },
22        "GetTab" => {
23            let tab_id: String = match service::get_arg(args, 0) {
24                Ok(v) => v,
25                Err(e) => return WebReturnType::error(e),
26            };
27            match store.must_get::<Tab>(&tab_id) {
28                Ok(tab) => WebReturnType::success(serde_json::to_value(&tab).unwrap_or_default()),
29                Err(e) => WebReturnType::error(e.to_string()),
30            }
31        }
32        "FocusWindow" => {
33            let window_id: String = match service::get_arg(args, 0) {
34                Ok(v) => v,
35                Err(e) => return WebReturnType::error(e),
36            };
37            match wcore::focus_window(store, &window_id) {
38                Ok(()) => WebReturnType::success_empty(),
39                Err(e) => WebReturnType::error(e.to_string()),
40            }
41        }
42        "AgreeTos" => match wcore::get_client(store) {
43            Ok(mut client) => {
44                client.tosagreed = chrono::Utc::now().timestamp_millis();
45                match store.update(&mut client) {
46                    Ok(_) => WebReturnType::success_empty(),
47                    Err(e) => WebReturnType::error(e.to_string()),
48                }
49            }
50            Err(e) => WebReturnType::error(e.to_string()),
51        },
52        "GetAllConnStatus" => {
53            // Every connection that has a status (backend::remote::status);
54            // `local` is never listed, it is always connected.
55            WebReturnType::success(
56                serde_json::to_value(crate::backend::remote::status::all()).unwrap_or_default(),
57            )
58        }
59        "TelemetryUpdate" => {
60            // Accept but ignore — telemetry not implemented
61            WebReturnType::success_empty()
62        }
63        _ => WebReturnType::error(format!("unknown client method: {}", call.method)),
64    }
65}