File size: 1,483 Bytes
b3c3418
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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();
}