Files
Nexus/packages/api/src/router/settings.ts
T
Hartmut 60d267fa0a feat(api): add SSE subscriber isolation, token pruning and E2E rate-limit guard
- event-bus: wrap each subscriber.fn call in try/catch so one throwing subscriber cannot kill delivery to all others
- event-bus: log Redis parse errors instead of swallowing them silently; add .catch() on Redis publish promise for async fallback to local delivery
- pruning.ts: new runPruning() deletes expired invite tokens, expired password-reset tokens, and read notifications older than 90 days
- settings.runPruning: expose pruning as adminProcedure mutation
- trpc.ts: E2E_TEST_MODE rate-limit bypass is now a no-op in production (NODE_ENV=production); logs a startup warning if misconfigured

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 08:35:39 +02:00

33 lines
1.2 KiB
TypeScript

import { adminProcedure, createTRPCRouter } from "../trpc.js";
import { runPruning } from "../lib/pruning.js";
import {
clearStoredRuntimeSecrets,
getAiConfiguredStatus,
getSystemSettingsView,
testSettingsAiConnection,
testSettingsGeminiConnection,
testSettingsSmtpConnection,
updateSystemSettings,
} from "./settings-procedure-support.js";
import { settingsUpdateInputSchema } from "./settings-support.js";
export const settingsRouter = createTRPCRouter({
getSystemSettings: adminProcedure.query(({ ctx }) => getSystemSettingsView(ctx)),
updateSystemSettings: adminProcedure
.input(settingsUpdateInputSchema)
.mutation(({ ctx, input }) => updateSystemSettings(ctx, input)),
clearStoredRuntimeSecrets: adminProcedure.mutation(({ ctx }) => clearStoredRuntimeSecrets(ctx)),
testAiConnection: adminProcedure.mutation(({ ctx }) => testSettingsAiConnection(ctx)),
testSmtpConnection: adminProcedure.mutation(({ ctx }) => testSettingsSmtpConnection(ctx)),
testGeminiConnection: adminProcedure.mutation(({ ctx }) => testSettingsGeminiConnection(ctx)),
getAiConfigured: adminProcedure.query(({ ctx }) => getAiConfiguredStatus(ctx)),
runPruning: adminProcedure.mutation(({ ctx }) => runPruning(ctx.db)),
});