import { ProviderInfo, ModelData } from "../types/heatmap"; export async function fetchUserData(authors: string[]) { const primaryAuthor = authors[0]; try { const response = await fetch(`https://huggingface.co/api/users/${primaryAuthor}/overview`); const data = await response.json(); return { fullName: data.fullname || primaryAuthor, avatarUrl: data.avatarUrl || null, }; } catch (error) { console.error(`Error fetching user data for ${primaryAuthor}:`, error); return { fullName: primaryAuthor, avatarUrl: null, }; } } export async function fetchAllProvidersData(providers: ProviderInfo[]): Promise { return Promise.all(providers.map(async (providerInfo) => { const { fullName, avatarUrl } = await fetchUserData(providerInfo.authors); return { ...providerInfo, fullName, avatarUrl: avatarUrl || null }; })); } export async function fetchAuthorData(author: string): Promise { const entityTypes = ["models", "datasets", "spaces"] as const; try { const allData = await Promise.all( entityTypes.map(async (type) => { const response = await fetch( `https://huggingface.co/api/${type}?author=${author}&sort=createdAt&direction=-1` ); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); return data.map((item: any): ModelData => ({ createdAt: item.createdAt, id: item.id, })); }) ); return allData.flat(); } catch (error) { console.error(`Error fetching data for author ${author}:`, error); return []; } } export async function fetchAllAuthorsData(authors: string[]): Promise { try { const allData = await Promise.all( authors.map(async (author) => await fetchAuthorData(author)) ); return allData.flat(); } catch (error) { console.error("Error fetching data for all authors:", error); return []; } }