feat: align with upstream 1.5.9.9
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
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<boolean> | null = null
|
||||
|
||||
const TELEMETRY_CACHE_TTL_MS = 5 * 60 * 1000
|
||||
|
||||
const readTelemetryEnabled = async (): Promise<boolean> => {
|
||||
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<boolean> => {
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user