import { asc } from 'drizzle-orm' import { db } from '~/drizzle/db' import { systemSettings } from '~/drizzle/schema' import { SYSTEM_SETTINGS_DEFAULTS } from './system-settings-defaults' import { getServerTimestamp } from './serverTime' let telemetryEnabledCache: boolean | null = null let telemetryEnabledCacheExpiresAt = 0 let pendingTelemetryEnabledPromise: Promise | null = null const TELEMETRY_CACHE_TTL_MS = 5 * 60 * 1000 const readTelemetryEnabled = async (): Promise => { const settingsResult = await db .select({ telemetryEnabled: systemSettings.telemetryEnabled }) .from(systemSettings) .orderBy(asc(systemSettings.id)) .limit(1) return settingsResult[0]?.telemetryEnabled ?? SYSTEM_SETTINGS_DEFAULTS.telemetryEnabled } export const setTelemetryEnabledCache = (enabled: boolean) => { telemetryEnabledCache = enabled telemetryEnabledCacheExpiresAt = getServerTimestamp() + TELEMETRY_CACHE_TTL_MS } export const isTelemetryEnabledCached = () => telemetryEnabledCache === true export const isTelemetryEnabled = async (): Promise => { if (telemetryEnabledCache !== null && telemetryEnabledCacheExpiresAt > getServerTimestamp()) { return telemetryEnabledCache } if (!pendingTelemetryEnabledPromise) { pendingTelemetryEnabledPromise = readTelemetryEnabled() .then((enabled) => { setTelemetryEnabledCache(enabled) return enabled }) .catch((error) => { console.warn('[Telemetry] Failed to resolve telemetry setting, telemetry disabled:', error) setTelemetryEnabledCache(false) return false }) .finally(() => { pendingTelemetryEnabledPromise = null }) } return pendingTelemetryEnabledPromise }