import { IDE_PROVIDER_IDS } from "@/shared/constants/providers"; import { buildCompactProviderEntries, resolveDashboardProviderInfo, type ProviderEntry, } from "./providerPageUtils"; type ProviderCategoryEntries = ProviderEntry[]; export interface CompactProviderEntryOptions { activeCategory: string; showFreeOnly: boolean; freeSectionEntries: ProviderCategoryEntries; compatibleProviderEntries: ProviderCategoryEntries; oauthProviderEntries: ProviderCategoryEntries; ideProviderEntries: ProviderCategoryEntries; noAuthEntries: ProviderCategoryEntries; upstreamProxyEntries: ProviderCategoryEntries; llmProviderEntries: ProviderCategoryEntries; aggregatorProviderEntries: ProviderCategoryEntries; enterpriseProviderEntries: ProviderCategoryEntries; embeddingRerankProviderEntries: ProviderCategoryEntries; imageProviderEntries: ProviderCategoryEntries; videoProviderEntries: ProviderCategoryEntries; webCookieProviderEntries: ProviderCategoryEntries; searchProviderEntries: ProviderCategoryEntries; webFetchEntries: ProviderCategoryEntries; audioProviderEntries: ProviderCategoryEntries; localProviderEntries: ProviderCategoryEntries; cloudAgentProviderEntries: ProviderCategoryEntries; } function getCompactProviderEntryGroups({ activeCategory, showFreeOnly, freeSectionEntries, compatibleProviderEntries, oauthProviderEntries, ideProviderEntries, noAuthEntries, upstreamProxyEntries, llmProviderEntries, aggregatorProviderEntries, enterpriseProviderEntries, embeddingRerankProviderEntries, imageProviderEntries, videoProviderEntries, webCookieProviderEntries, searchProviderEntries, webFetchEntries, audioProviderEntries, localProviderEntries, cloudAgentProviderEntries, }: CompactProviderEntryOptions): ProviderEntry[][] { const oauthEntries = oauthProviderEntries.filter( (entry) => !IDE_PROVIDER_IDS.has(entry.providerId) ); const apiKeyEntries = [ llmProviderEntries, aggregatorProviderEntries, enterpriseProviderEntries, embeddingRerankProviderEntries, imageProviderEntries, videoProviderEntries, ]; if (showFreeOnly) return [freeSectionEntries]; if (activeCategory === "compatible") return [compatibleProviderEntries]; if (activeCategory === "oauth") return [oauthEntries]; if (activeCategory === "ide") return [ideProviderEntries]; if (activeCategory === "no-auth") return [noAuthEntries]; if (activeCategory === "upstream-proxy") return [upstreamProxyEntries]; if (activeCategory === "apikey") return apiKeyEntries; if (activeCategory === "webcookie") return [webCookieProviderEntries]; if (activeCategory === "search") return [searchProviderEntries]; if (activeCategory === "webfetch") return [webFetchEntries]; if (activeCategory === "audio") return [audioProviderEntries]; if (activeCategory === "local") return [localProviderEntries]; if (activeCategory === "cloudagent") return [cloudAgentProviderEntries]; return [ compatibleProviderEntries, oauthEntries, ideProviderEntries, webCookieProviderEntries, llmProviderEntries, upstreamProxyEntries, aggregatorProviderEntries, enterpriseProviderEntries, cloudAgentProviderEntries, localProviderEntries, searchProviderEntries, embeddingRerankProviderEntries, imageProviderEntries, audioProviderEntries, videoProviderEntries, noAuthEntries, ]; } export function buildCompactProviderEntriesForPage( options: CompactProviderEntryOptions ): ProviderEntry[] { return buildCompactProviderEntries(getCompactProviderEntryGroups(options), { deferNoAuth: options.activeCategory !== "no-auth", }); } const CATEGORY_AUTH_TYPES: Record = { "cloud-agent": "cloud-agent", "no-auth": "no-auth", "upstream-proxy": "upstream-proxy", "web-cookie": "web-cookie", audio: "audio", local: "local", search: "search", }; export function getCompactProviderAuthType( entry: ProviderEntry, showFreeOnly: boolean ): string { if (showFreeOnly && entry.toggleAuthType === "free") return "free"; if (entry.displayAuthType === "compatible") return "compatible"; const info = resolveDashboardProviderInfo(entry.providerId); if (!info) return entry.displayAuthType; return CATEGORY_AUTH_TYPES[info.category] ?? entry.displayAuthType; }