From 90c24c1a56fe2a44cfc8738ddf91e899ac812a5a Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 7 Oct 2026 10:22:48 +0000 Subject: [PATCH] fix(api): type-safe focusFactValue lookup Co-authored-by: cynarAI --- apps/api/src/onboarding-intake.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/apps/api/src/onboarding-intake.ts b/apps/api/src/onboarding-intake.ts index ec91ff8..cb224ec 100644 --- a/apps/api/src/onboarding-intake.ts +++ b/apps/api/src/onboarding-intake.ts @@ -50,7 +50,7 @@ export interface FocusOption { apps: string[]; } -const FOCUS_FACTS: Record> = { +const FOCUS_FACTS = { en: { day: "Wants help with day-to-day work first", inbox: "Wants help with inbox and email first", @@ -63,14 +63,17 @@ const FOCUS_FACTS: Record> = { research: "Möchte zuerst bei Recherche und Schreiben unterstützt werden", crew: "Möchte eine koordinierte Crew aus Spezialisten-Bots", }, -}; +} as const satisfies Record>; /** Profile fact text for a focus answer, in the user's locale (defaults to English). */ +function isFocusOptionId(id: string): id is FocusOption["id"] { + return FOCUS_OPTIONS.some((option) => option.id === id); +} + export function focusFactValue(focusId: string, locale: string): string { - const id = focusId as FocusOption["id"]; + if (!isFocusOptionId(focusId)) return focusId; const key = locale.toLowerCase().startsWith("de") ? "de" : "en"; - const table = FOCUS_FACTS[key]; - return table[id] ?? FOCUS_FACTS.en[id] ?? focusId; + return FOCUS_FACTS[key][focusId] ?? FOCUS_FACTS.en[focusId]; } export const FOCUS_OPTIONS: FocusOption[] = [