import { ensureKnownConfigKey, setGlobalConfigValue, } from "#server/service/config"; import { toPublicConfigError } from "#server/service/config/errors"; import { requireAdmin } from "#server/utils/admin-guard"; import { assertUnderRateLimit } from "#server/utils/simple-rate-limit"; import { getRequestIP } from "h3"; type UpdateGlobalConfigBody = { key: string; value: unknown; }; export default defineWrappedResponseHandler(async (event) => { try { await requireAdmin(event); const ip = getRequestIP(event, { xForwardedFor: true }) ?? "unknown"; assertUnderRateLimit(`admin-config-global-put:${ip}`, 60, 60_000); const body = await readBody(event); const key = ensureKnownConfigKey(body.key); await setGlobalConfigValue(key, body.value); const value = await event.context.config.getGlobal(key); return R.success({ key, value, }); } catch (err) { throw toPublicConfigError(err); } });