From 82ca9a2a60ed09510e881b6564de6f6fc1eae53b Mon Sep 17 00:00:00 2001 From: ryan-crabbe-berri Date: Sat, 20 Jun 2026 11:05:22 -0700 Subject: [PATCH] refactor(ui): guard buildOnboardingUrl against a missing invitation id Return "" instead of emitting an invitation_id=undefined link when the id is not yet available, matching the existing empty-baseUrl guard. Placed after the SSO branch so the SSO link, which does not use the id, is unaffected Refs LIT-3687 --- .../src/components/onboarding_link.test.tsx | 11 +++++++++++ .../src/components/onboarding_link.tsx | 3 +++ 2 files changed, 14 insertions(+) diff --git a/ui/litellm-dashboard/src/components/onboarding_link.test.tsx b/ui/litellm-dashboard/src/components/onboarding_link.test.tsx index e99a6600d83..039d5e250da 100644 --- a/ui/litellm-dashboard/src/components/onboarding_link.test.tsx +++ b/ui/litellm-dashboard/src/components/onboarding_link.test.tsx @@ -56,4 +56,15 @@ describe("buildOnboardingUrl", () => { }), ).toBe(""); }); + + it("returns an empty string rather than an invitation_id=undefined link when the id is not ready", () => { + expect( + buildOnboardingUrl({ + baseUrl: "http://localhost:4000/", + invitationId: undefined, + hasUserSetupSso: false, + resetPassword: false, + }), + ).toBe(""); + }); }); diff --git a/ui/litellm-dashboard/src/components/onboarding_link.tsx b/ui/litellm-dashboard/src/components/onboarding_link.tsx index da12eaf0e60..0c27287a9e4 100644 --- a/ui/litellm-dashboard/src/components/onboarding_link.tsx +++ b/ui/litellm-dashboard/src/components/onboarding_link.tsx @@ -44,6 +44,9 @@ export function buildOnboardingUrl({ if (hasUserSetupSso) { return new URL(uiPath, baseUrl).toString(); } + if (!invitationId) { + return ""; + } const action = resetPassword ? "&action=reset_password" : ""; return new URL(`${uiPath}/onboarding?invitation_id=${invitationId}${action}`, baseUrl).toString(); }