Files
OmniRoute/src/lib/display/names.ts

74 lines
2.2 KiB
TypeScript

/**
* 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;
}