whdemo / src /main.ts
Charlie
update files
d607a39
raw
history blame
4.38 kB
import { tokenManager } from "./token";
import { Client } from "./client";
import { WhoAmIUser } from "@huggingface/hub";
const baseUrl = "https://huggingface.co/api";
const showAuthenticatedUI = async () => {
const accessToken = tokenManager.getAccessToken();
if (!accessToken) {
throw new Error("Access token not found");
}
const client = new Client(baseUrl, accessToken);
// Hide token form
const tokenForm = document.getElementById("token-form");
if (tokenForm) {
tokenForm.style.display = "none";
}
// Show repo form and signout button
const repoForm = document.getElementById("repo-form");
const signoutButton = document.getElementById("signout");
if (repoForm) {
repoForm.style.removeProperty("display");
}
if (signoutButton) {
signoutButton.style.removeProperty("display");
signoutButton.onclick = () => tokenManager.logout();
}
// Add create repo ui
const createRepoButton = document.getElementById("create-repo");
const repoNameInput = <HTMLInputElement>document.getElementById("repo-name");
const resourceGroupInput = <HTMLInputElement>(
document.getElementById("resource-group-name")
);
const resourceGroupContainer = document.getElementById(
"resource-group-container"
);
if (createRepoButton && repoNameInput) {
createRepoButton.onclick = async () => {
const repoName = repoNameInput.value.trim();
const orgSelect = <HTMLSelectElement>(
document.getElementById("org-select")
);
if (repoName) {
try {
const organizationName = orgSelect?.value || undefined;
const resourceGroupName = organizationName
? resourceGroupInput?.value.trim()
: undefined;
// create repo
const repo = await client.post<void>("repos/create", {
type: "model",
name: repoName,
organization: organizationName,
private: true,
});
console.log({ repo });
// create RG
if (organizationName && resourceGroupName) {
await client.post<void>(
`organizations/${organizationName}/resource-groups`,
{
name: resourceGroupName,
description: `Resource group for repository ${name}`,
autoJoin: {
enabled: true,
role: "admin",
},
}
);
}
alert("Repository and resource group created successfully!");
} catch (error) {
console.error(error);
}
}
};
}
// Handle org select change to show/hide resource group input
const orgSelect = document.getElementById("org-select") as HTMLSelectElement;
if (orgSelect && resourceGroupContainer) {
orgSelect.onchange = () => {
if (orgSelect.value) {
resourceGroupContainer.style.removeProperty("display");
} else {
resourceGroupContainer.style.display = "none";
}
};
}
try {
const userInfo = await client.get<WhoAmIUser>("whoami-v2");
// Populate org select
if (orgSelect && userInfo.orgs) {
userInfo.orgs.forEach((org) => {
const option = document.createElement("option");
option.value = org.name;
option.textContent = org.name;
orgSelect.appendChild(option);
});
}
} catch (error) {
console.error(error);
}
};
const showUnauthenticatedUI = () => {
const tokenForm = document.getElementById("token-form");
const tokenInput = document.getElementById("token-input") as HTMLInputElement;
const tokenSubmit = document.getElementById("token-submit");
if (tokenForm && tokenInput && tokenSubmit) {
tokenForm.style.removeProperty("display");
tokenSubmit.onclick = () => {
const token = tokenInput.value.trim();
if (token) {
tokenManager.setToken(token);
showAuthenticatedUI();
}
};
}
const repoForm = document.getElementById("repo-form");
const signoutButton = document.getElementById("signout");
if (repoForm) {
repoForm.style.display = "none";
}
if (signoutButton) {
signoutButton.style.display = "none";
}
};
const init = async (): Promise<void> => {
if (tokenManager.isAuthenticated()) {
showAuthenticatedUI();
} else {
showUnauthenticatedUI();
}
};
init();