Skip to main content

Mountain/Binary/Build/PostHogPlugin/
Initialize.rs

1#![allow(non_snake_case)]
2
3//! Bring up the global PostHog client and emit
4//! `mountain:session:start`. Must be called once during boot;
5//! re-entrancy is safe because the underlying `OnceLock::set` returns
6//! `Err` on subsequent attempts.
7//!
8//! Note: posthog-rs 0.5 renamed `api_endpoint` → `host` on
9//! `ClientOptionsBuilder` to match the JS/Python SDK vocabulary; keep
10//! `host(...)` here.
11
12use crate::{
13	Binary::Build::PostHogPlugin::{CaptureAllowed, CaptureEvent, Client, Constants},
14	dev_log,
15};
16
17pub async fn Fn() {
18	if !CaptureAllowed::Fn() {
19		return;
20	}
21
22	let Options = posthog_rs::ClientOptionsBuilder::default()
23		.api_key(Constants::POSTHOG_API_KEY.to_string())
24		.host(Constants::POSTHOG_HOST.to_string())
25		.build()
26		.expect("PostHog client options");
27
28	let PostHogClient = posthog_rs::client(Options).await;
29	let _ = Client::CLIENT.set(PostHogClient);
30	dev_log!(
31		"lifecycle",
32		"[PostHog] Initialized (host={}, debug mode)",
33		Constants::POSTHOG_HOST
34	);
35	CaptureEvent::Fn("mountain:session:start", None);
36}