import type { BackendKind } from "#/api/backend-registry/types"; export const UNKNOWN_TELEMETRY_VERSION = "unknown"; export type BackendConnectionMethod = "manual" | "cloud_login" | "cloud_cookie"; export interface CloudTelemetryContextInput { userId?: string | null; email?: string | null; orgId?: string | null; } export interface BackendTelemetryContextInput { backendKind?: BackendKind | null; agentServerVersion?: string | null; automationSdkVersion?: string | null; backendVersion?: string | null; connectionMethod?: BackendConnectionMethod; } function normalizeTelemetryVersion(version: string | null | undefined): string { const trimmed = version?.trim(); return trimmed || UNKNOWN_TELEMETRY_VERSION; } function normalizeOptionalProperty( value: string | null | undefined, ): string | null { const trimmed = value?.trim(); return trimmed || null; } export function getBackendTelemetryProperties({ backendKind, agentServerVersion, automationSdkVersion, backendVersion, connectionMethod, }: BackendTelemetryContextInput): Record { const resolvedAgentServerVersion = normalizeTelemetryVersion( agentServerVersion ?? backendVersion, ); const resolvedAutomationSdkVersion = normalizeTelemetryVersion(automationSdkVersion); const resolvedBackendVersion = normalizeTelemetryVersion( backendVersion ?? agentServerVersion, ); return { backend_kind: backendKind ?? null, agent_server_version: resolvedAgentServerVersion, automation_sdk_version: resolvedAutomationSdkVersion, backend_version: resolvedBackendVersion, ...(connectionMethod ? { connection_method: connectionMethod } : {}), }; } export function getCloudTelemetryProperties( context: CloudTelemetryContextInput | null = null, ): Record { return { cloud_user_id: normalizeOptionalProperty(context?.userId), cloud_user_email: normalizeOptionalProperty(context?.email), cloud_org_id: normalizeOptionalProperty(context?.orgId), }; }