ghp / packages /server /src /repositories /audioProxyPolicyRepository.ts
QSLY's picture
deploy: build Hugging Face Space from source
00a912e
Raw
History Blame Contribute Delete
1.43 kB
import type { AudioProxyPolicy } from '@music-together/shared'
import { db } from './database.js'
const POLICY_KEY = 'audio_proxy_policy'
export const DEFAULT_AUDIO_PROXY_POLICY: Readonly<AudioProxyPolicy> = Object.freeze({
kugouForceProxy: true,
})
interface ServerSettingRow {
value_json: string
}
const selectPolicy = db.prepare<[string], ServerSettingRow>('SELECT value_json FROM server_settings WHERE key = ?')
const upsertPolicy = db.prepare(`
INSERT INTO server_settings (key, value_json, updated_at)
VALUES (?, ?, ?)
ON CONFLICT(key) DO UPDATE SET value_json = excluded.value_json, updated_at = excluded.updated_at
`)
function parsePolicy(value: string | undefined): AudioProxyPolicy {
if (!value) return { ...DEFAULT_AUDIO_PROXY_POLICY }
try {
const parsed = JSON.parse(value) as Partial<AudioProxyPolicy>
return {
kugouForceProxy:
typeof parsed.kugouForceProxy === 'boolean'
? parsed.kugouForceProxy
: DEFAULT_AUDIO_PROXY_POLICY.kugouForceProxy,
}
} catch {
return { ...DEFAULT_AUDIO_PROXY_POLICY }
}
}
export const audioProxyPolicyRepo = {
get(): AudioProxyPolicy {
return parsePolicy(selectPolicy.get(POLICY_KEY)?.value_json)
},
update(patch: Partial<AudioProxyPolicy>): AudioProxyPolicy {
const policy = { ...this.get(), ...patch }
upsertPolicy.run(POLICY_KEY, JSON.stringify(policy), Date.now())
return policy
},
}