stakpak_shared/
telemetry.rs1use serde::Serialize;
7use std::fmt;
8
9const TELEMETRY_ENDPOINT: &str = "https://apiv2.stakpak.dev/v1/telemetry";
10
11#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
12pub enum TelemetryEvent {
13 FirstOpen,
14 UserPrompted,
15}
16
17impl fmt::Display for TelemetryEvent {
18 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
19 match self {
20 TelemetryEvent::FirstOpen => write!(f, "FirstOpen"),
21 TelemetryEvent::UserPrompted => write!(f, "UserPrompted"),
22 }
23 }
24}
25
26#[derive(Serialize)]
27struct TelemetryPayload {
28 event: String,
29 machine_name: String,
30 provider: String,
31 user_id: String,
32}
33
34pub fn capture_event(
35 anonymous_id: &str,
36 machine_name: Option<&str>,
37 enabled: bool,
38 event: TelemetryEvent,
39) {
40 if !enabled {
41 return;
42 }
43
44 let payload = TelemetryPayload {
45 event: event.to_string(),
46 machine_name: machine_name.unwrap_or("").to_string(),
47 provider: "Local".to_string(),
48 user_id: anonymous_id.to_string(),
49 };
50
51 tokio::spawn(async move {
52 let client = reqwest::Client::new();
53 let _ = client.post(TELEMETRY_ENDPOINT).json(&payload).send().await;
54 });
55}