feat(FN-2952): validate unavailableNodePolicy in PUT /settings

Adds server-side validation for the `unavailableNodePolicy` field on the
PUT /api/settings route. Accepts only `block` or `fallback-local`;
rejects unknown strings and non-string values with 400.

- packages/dashboard/src/routes/register-settings-memory-routes.ts:
  call `validateUnavailableNodePolicy` and throw `badRequest` on invalid input
- packages/dashboard/src/__tests__/routes.test.ts: cover accept,
  invalid-value, and non-string cases

Fusion-Task-Id: FN-2952
This commit is contained in:
Fusion
2026-04-29 14:51:38 -07:00
committed by gsxdsm
parent 7e832bbf92
commit 7afbd553c2
2 changed files with 55 additions and 0 deletions

View File

@@ -35,6 +35,7 @@ import {
validateBackupRetention,
validateBackupSchedule,
validateImportData,
validateUnavailableNodePolicy,
writeInsightsMemory,
writeMemory,
writeProjectMemoryFile,
@@ -334,6 +335,13 @@ export function registerSettingsMemoryRoutes(ctx: ApiRoutesContext, deps: Settin
) {
throw badRequest("archiveAgentLogMode must be one of: none, compact, full");
}
if (clientSettings.unavailableNodePolicy !== undefined) {
const validatedUnavailableNodePolicy = validateUnavailableNodePolicy(clientSettings.unavailableNodePolicy);
if (validatedUnavailableNodePolicy === undefined) {
throw badRequest("unavailableNodePolicy must be one of: block, fallback-local");
}
clientSettings.unavailableNodePolicy = validatedUnavailableNodePolicy;
}
// Validate memoryBackendType if provided - must be string or null (for explicit clear)
// Unknown backend IDs are accepted and persisted verbatim (for custom backend compatibility)