Files
ComfyUI_frontend/src/platform/telemetry/initTelemetry.ts
Robin Huang 6c2680f0ba feat: Add PostHog telemetry provider (#9409)
Add PostHog as a telemetry provider for cloud builds so custom events
can be correlated with session recordings. Follows the same pattern as
MixpanelTelemetryProvider with dynamic import, event queuing, and
disabled events from remote config. Tree-shaken away in OSS builds.

The posthog-js package uses Apache-2.0 (verified from its LICENSE file)
but declares it as "SEE LICENSE IN LICENSE" in package.json, which
  the license checker can't parse.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-9409-feat-Add-PostHog-telemetry-provider-31a6d73d3650818b8e86c772c6551099)
by [Unito](https://www.unito.io)
2026-03-05 16:19:35 -08:00

48 lines
1.5 KiB
TypeScript

/**
* Telemetry Provider - Cloud Initialization
*
* This module is only imported in cloud builds to keep
* cloud telemetry code out of local/desktop bundles.
*/
import { setTelemetryRegistry } from './index'
const IS_CLOUD_BUILD = __DISTRIBUTION__ === 'cloud'
let _initPromise: Promise<void> | null = null
/**
* Initialize telemetry providers for cloud builds.
* Must be called early in app startup (e.g., main.ts).
* Safe to call multiple times - only initializes once.
*/
export async function initTelemetry(): Promise<void> {
if (!IS_CLOUD_BUILD) return
if (_initPromise) return _initPromise
_initPromise = (async () => {
const [
{ TelemetryRegistry },
{ MixpanelTelemetryProvider },
{ GtmTelemetryProvider },
{ ImpactTelemetryProvider },
{ PostHogTelemetryProvider }
] = await Promise.all([
import('./TelemetryRegistry'),
import('./providers/cloud/MixpanelTelemetryProvider'),
import('./providers/cloud/GtmTelemetryProvider'),
import('./providers/cloud/ImpactTelemetryProvider'),
import('./providers/cloud/PostHogTelemetryProvider')
])
const registry = new TelemetryRegistry()
registry.registerProvider(new MixpanelTelemetryProvider())
registry.registerProvider(new GtmTelemetryProvider())
registry.registerProvider(new ImpactTelemetryProvider())
registry.registerProvider(new PostHogTelemetryProvider())
setTelemetryRegistry(registry)
})()
return _initPromise
}