Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/platform/remoteConfig/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ type FirebaseRuntimeConfig = {
* Remote configuration type
* Configuration fetched from the server at runtime
*/
import type { TelemetryEventName } from '@/platform/telemetry/types'

export type RemoteConfig = {
mixpanel_token?: string
subscription_required?: boolean
Expand All @@ -31,4 +33,5 @@ export type RemoteConfig = {
comfy_api_base_url?: string
comfy_platform_base_url?: string
firebase_config?: FirebaseRuntimeConfig
telemetry_disabled_events?: TelemetryEventName[]
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import type { OverridedMixpanel } from 'mixpanel-browser'
import { watch } from 'vue'

import { useCurrentUser } from '@/composables/auth/useCurrentUser'
import {
Expand Down Expand Up @@ -41,9 +42,30 @@ import type {
WorkflowCreatedMetadata,
WorkflowImportMetadata
} from '../../types'
import { remoteConfig } from '@/platform/remoteConfig/remoteConfig'
import type { RemoteConfig } from '@/platform/remoteConfig/types'
import { TelemetryEvents } from '../../types'
import { normalizeSurveyResponses } from '../../utils/surveyNormalization'

const DEFAULT_DISABLED_EVENTS: TelemetryEventName[] = [
TelemetryEvents.WORKFLOW_OPENED,
TelemetryEvents.PAGE_VISIBILITY_CHANGED,
TelemetryEvents.TAB_COUNT_TRACKING,
TelemetryEvents.NODE_SEARCH,
TelemetryEvents.NODE_SEARCH_RESULT_SELECTED,
TelemetryEvents.TEMPLATE_FILTER_CHANGED,
TelemetryEvents.SETTING_CHANGED,
TelemetryEvents.HELP_CENTER_OPENED,
TelemetryEvents.HELP_RESOURCE_CLICKED,
TelemetryEvents.HELP_CENTER_CLOSED,
TelemetryEvents.WORKFLOW_CREATED,
TelemetryEvents.UI_BUTTON_CLICKED
]

const TELEMETRY_EVENT_SET = new Set<TelemetryEventName>(
Object.values(TelemetryEvents) as TelemetryEventName[]
)

interface QueuedEvent {
eventName: TelemetryEventName
properties?: TelemetryEventProperties
Expand All @@ -67,8 +89,15 @@ export class MixpanelTelemetryProvider implements TelemetryProvider {
private eventQueue: QueuedEvent[] = []
private isInitialized = false
private lastTriggerSource: ExecutionTriggerSource | undefined
private disabledEvents = new Set<TelemetryEventName>(DEFAULT_DISABLED_EVENTS)

constructor() {
this.configureDisabledEvents(
(window.__CONFIG__ as Partial<RemoteConfig> | undefined) ?? null
)
watch(remoteConfig, (config) => {
this.configureDisabledEvents(config)
})
const token = window.__CONFIG__?.mixpanel_token

if (token) {
Expand Down Expand Up @@ -131,6 +160,10 @@ export class MixpanelTelemetryProvider implements TelemetryProvider {
return
}

if (this.disabledEvents.has(eventName)) {
return
}

const event: QueuedEvent = { eventName, properties }

if (this.isInitialized && this.mixpanel) {
Expand All @@ -146,6 +179,23 @@ export class MixpanelTelemetryProvider implements TelemetryProvider {
}
}

private configureDisabledEvents(config: Partial<RemoteConfig> | null): void {
const disabledSource =
config?.telemetry_disabled_events ?? DEFAULT_DISABLED_EVENTS

this.disabledEvents = this.buildEventSet(disabledSource)
}

private buildEventSet(values: TelemetryEventName[]): Set<TelemetryEventName> {
const normalized = new Set<TelemetryEventName>()
values.forEach((value) => {
if (TELEMETRY_EVENT_SET.has(value)) {
normalized.add(value)
}
})
return normalized
}

trackSignupOpened(): void {
this.trackEvent(TelemetryEvents.USER_SIGN_UP_OPENED)
}
Expand Down
Loading