11import type { OverridedMixpanel } from 'mixpanel-browser'
2+ import { watch } from 'vue'
23
34import { useCurrentUser } from '@/composables/auth/useCurrentUser'
45import {
@@ -41,9 +42,30 @@ import type {
4142 WorkflowCreatedMetadata ,
4243 WorkflowImportMetadata
4344} from '../../types'
45+ import { remoteConfig } from '@/platform/remoteConfig/remoteConfig'
46+ import type { RemoteConfig } from '@/platform/remoteConfig/types'
4447import { TelemetryEvents } from '../../types'
4548import { normalizeSurveyResponses } from '../../utils/surveyNormalization'
4649
50+ const DEFAULT_DISABLED_EVENTS = [
51+ TelemetryEvents . WORKFLOW_OPENED ,
52+ TelemetryEvents . PAGE_VISIBILITY_CHANGED ,
53+ TelemetryEvents . TAB_COUNT_TRACKING ,
54+ TelemetryEvents . NODE_SEARCH ,
55+ TelemetryEvents . NODE_SEARCH_RESULT_SELECTED ,
56+ TelemetryEvents . TEMPLATE_FILTER_CHANGED ,
57+ TelemetryEvents . SETTING_CHANGED ,
58+ TelemetryEvents . HELP_CENTER_OPENED ,
59+ TelemetryEvents . HELP_RESOURCE_CLICKED ,
60+ TelemetryEvents . HELP_CENTER_CLOSED ,
61+ TelemetryEvents . WORKFLOW_CREATED ,
62+ TelemetryEvents . UI_BUTTON_CLICKED
63+ ] as const satisfies TelemetryEventName [ ]
64+
65+ const TELEMETRY_EVENT_SET = new Set < TelemetryEventName > (
66+ Object . values ( TelemetryEvents ) as TelemetryEventName [ ]
67+ )
68+
4769interface QueuedEvent {
4870 eventName : TelemetryEventName
4971 properties ?: TelemetryEventProperties
@@ -67,8 +89,19 @@ export class MixpanelTelemetryProvider implements TelemetryProvider {
6789 private eventQueue : QueuedEvent [ ] = [ ]
6890 private isInitialized = false
6991 private lastTriggerSource : ExecutionTriggerSource | undefined
92+ private disabledEvents = new Set < TelemetryEventName > ( DEFAULT_DISABLED_EVENTS )
7093
7194 constructor ( ) {
95+ this . configureDisabledEvents (
96+ ( window . __CONFIG__ as Partial < RemoteConfig > | undefined ) ?? null
97+ )
98+ watch (
99+ remoteConfig ,
100+ ( config ) => {
101+ this . configureDisabledEvents ( config )
102+ } ,
103+ { immediate : true }
104+ )
72105 const token = window . __CONFIG__ ?. mixpanel_token
73106
74107 if ( token ) {
@@ -131,6 +164,10 @@ export class MixpanelTelemetryProvider implements TelemetryProvider {
131164 return
132165 }
133166
167+ if ( this . disabledEvents . has ( eventName ) ) {
168+ return
169+ }
170+
134171 const event : QueuedEvent = { eventName, properties }
135172
136173 if ( this . isInitialized && this . mixpanel ) {
@@ -146,6 +183,27 @@ export class MixpanelTelemetryProvider implements TelemetryProvider {
146183 }
147184 }
148185
186+ private configureDisabledEvents ( config : Partial < RemoteConfig > | null ) : void {
187+ const disabledSource =
188+ config ?. telemetry_disabled_events ?? DEFAULT_DISABLED_EVENTS
189+
190+ this . disabledEvents = this . buildEventSet ( disabledSource )
191+ }
192+
193+ private buildEventSet ( values : TelemetryEventName [ ] ) : Set < TelemetryEventName > {
194+ return new Set (
195+ values . filter ( ( value ) => {
196+ const isValid = TELEMETRY_EVENT_SET . has ( value )
197+ if ( ! isValid && import . meta. env . DEV ) {
198+ console . warn (
199+ `Unknown telemetry event name in disabled list: ${ value } `
200+ )
201+ }
202+ return isValid
203+ } )
204+ )
205+ }
206+
149207 trackSignupOpened ( ) : void {
150208 this . trackEvent ( TelemetryEvents . USER_SIGN_UP_OPENED )
151209 }
0 commit comments