/** * Centralized display name helpers for provider and account/connection labels. * * Prevents raw internal IDs (connection UUIDs, dynamic provider IDs) from * leaking into user-facing dashboards (Health, Analytics, Sessions, Rate-limits, * Quota, Compatible Provider pages, etc.). * * Priority order: * — Account: name → displayName → email → short readble label * — Provider: node.name → node.prefix → alias → readable ID * * @module lib/display/names */ export interface ConnectionLike { id?: string | null; name?: string | null; displayName?: string | null; email?: string | null; } export interface ProviderNodeLike { name?: string | null; prefix?: string | null; } /** * Friendly display name for an account/connection. * * Priority: name → displayName → email → "Account #<6-char ID>" */ export function getAccountDisplayName(conn: ConnectionLike): string { if (!conn) return "Unknown Account"; const name = (typeof conn.name === "string" && conn.name.trim()) || (typeof conn.displayName === "string" && conn.displayName.trim()) || (typeof conn.email === "string" && conn.email.trim()); if (name) return name; if (typeof conn.id === "string" && conn.id) { return `Account #${conn.id.slice(0, 6)}`; } return "Unknown Account"; } /** * Friendly display name for a provider node/ID. * * Priority: node.name → node.prefix → de-UUIDed providerId * * Dynamic compatible provider IDs like * "openai-compatible-chat-02669115-2545-4896-b003-cb4dac09d441" * are rendered as "Compatible (openai)". */ export function getProviderDisplayName( providerId: string | null | undefined, providerNode?: ProviderNodeLike | null ): string { if (providerNode?.name?.trim()) return providerNode.name.trim(); if (providerNode?.prefix?.trim()) return providerNode.prefix.trim(); if (!providerId) return "Unknown Provider"; // Simplify dynamic compatible provider IDs const match = providerId.match( /^(openai|anthropic)-compatible-(?:chat|responses)-[0-9a-f-]{10,}$/i ); if (match) return `Compatible (${match[1]})`; if (/^anthropic-compatible-cc-[0-9a-f-]{10,}$/i.test(providerId)) { return "CC Compatible"; } return providerId; }