mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-05 23:02:10 +03:00
74 lines
2.2 KiB
TypeScript
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;
|
|
}
|