Thomas G. Lopes
indicator
b3c3418
raw
history blame
1.48 kB
export interface OrganizationInfo {
name: string;
displayName: string;
avatar?: string;
isValid: boolean;
}
const orgCache = new Map<string, OrganizationInfo>();
export async function validateOrganization(orgName: string): Promise<OrganizationInfo> {
if (!orgName.trim()) {
return {
name: "",
displayName: "Personal Account",
isValid: false,
};
}
// Check cache first
if (orgCache.has(orgName)) {
return orgCache.get(orgName)!;
}
try {
const response = await fetch(`https://huggingface.co/api/organizations/${orgName}/overview`);
if (response.ok) {
const data = await response.json();
const orgInfo: OrganizationInfo = {
name: orgName,
displayName: data.displayName || orgName,
avatar: data.avatar || `https://huggingface.co/api/organizations/${orgName}/avatar`,
isValid: true,
};
// Cache the result
orgCache.set(orgName, orgInfo);
return orgInfo;
} else {
const orgInfo: OrganizationInfo = {
name: orgName,
displayName: orgName,
isValid: false,
};
// Cache invalid result for a short time
orgCache.set(orgName, orgInfo);
return orgInfo;
}
} catch (error) {
console.warn(`Failed to validate organization ${orgName}:`, error);
const orgInfo: OrganizationInfo = {
name: orgName,
displayName: orgName,
isValid: false,
};
// Cache error result
orgCache.set(orgName, orgInfo);
return orgInfo;
}
}
export function clearOrganizationCache() {
orgCache.clear();
}