MCPcopy Create free account
hub / github.com/NativeScript/SimDeck / query_remote_service_inspector

Function query_remote_service_inspector

packages/server/src/api/routes.rs:5061–5119  ·  view source on GitHub ↗
(
    server_url: &str,
    access_token: &str,
    process_identifier: i64,
    method: &str,
    params: Value,
)

Source from the content-addressed store, hash-verified

5059}
5060
5061async fn query_remote_service_inspector(
5062 server_url: &str,
5063 access_token: &str,
5064 process_identifier: i64,
5065 method: &str,
5066 params: Value,
5067) -> Result<Value, String> {
5068 let endpoint = InspectorServiceEndpoint::parse(server_url)?;
5069 let body = json_value!({
5070 "processIdentifier": process_identifier,
5071 "method": method,
5072 "params": params,
5073 })
5074 .to_string();
5075 let request = format!(
5076 "POST /api/inspector/request HTTP/1.1\r\nHost: {}\r\nContent-Type: application/json\r\n{}: {}\r\nContent-Length: {}\r\nConnection: close\r\n\r\n{}",
5077 endpoint.host_header(),
5078 crate::auth::ACCESS_TOKEN_HEADER,
5079 access_token,
5080 body.len(),
5081 body
5082 );
5083 let mut stream = timeout(
5084 INSPECTOR_AGENT_TIMEOUT,
5085 TcpStream::connect((endpoint.host.as_str(), endpoint.port)),
5086 )
5087 .await
5088 .map_err(|_| format!("Timed out connecting to published SimDeck service at {server_url}."))?
5089 .map_err(|error| {
5090 format!("Unable to connect to published SimDeck service at {server_url}: {error}")
5091 })?;
5092 stream
5093 .write_all(request.as_bytes())
5094 .await
5095 .map_err(|error| format!("Unable to write published inspector request: {error}"))?;
5096
5097 let mut response = Vec::new();
5098 timeout(INSPECTOR_AGENT_TIMEOUT, stream.read_to_end(&mut response))
5099 .await
5100 .map_err(|_| format!("Timed out waiting for published inspector method {method}."))?
5101 .map_err(|error| format!("Unable to read published inspector response: {error}"))?;
5102 let response = String::from_utf8_lossy(&response);
5103 let (headers, body) = response
5104 .split_once("\r\n\r\n")
5105 .ok_or_else(|| "Published inspector returned malformed HTTP.".to_owned())?;
5106 let status_line = headers.lines().next().unwrap_or_default();
5107 if !status_line.contains(" 2") {
5108 return Err(format!(
5109 "Published inspector method {method} failed with {status_line}: {body}"
5110 ));
5111 }
5112 let value: Value = serde_json::from_str(body.trim()).map_err(|error| {
5113 format!("Published inspector returned malformed JSON for method {method}: {error}")
5114 })?;
5115 value
5116 .get("result")
5117 .cloned()
5118 .ok_or_else(|| format!("Published inspector method {method} did not include a result."))

Callers 1

query_inspector_sessionFunction · 0.85

Calls 3

getMethod · 0.65
connectFunction · 0.50
as_strMethod · 0.45

Tested by

no test coverage detected