whdemo / dist /main.js
Charlie
update files
b200338
raw
history blame
6.47 kB
// src/oauth.ts
var TokenManager = class {
constructor() {
this.token = null;
const storedToken = localStorage.getItem("token");
if (storedToken) {
this.token = storedToken;
}
}
setToken(token) {
this.token = token;
localStorage.setItem("token", token);
}
logout() {
this.token = null;
localStorage.removeItem("token");
window.location.reload();
}
getAccessToken() {
return this.token;
}
isAuthenticated() {
return this.token !== null;
}
};
var tokenManager = new TokenManager();
// src/main.ts
async function getOrganizationInfo(accessToken) {
const response = await fetch("https://huggingface.co/api/whoami-v2", {
headers: {
Authorization: `Bearer ${accessToken}`
}
});
if (!response.ok) {
throw new Error(
`Failed to fetch organization info: ${response.statusText}`
);
}
return response.json();
}
async function getOrganizationMembers(accessToken, organization) {
const response = await fetch(
`https://huggingface.co/api/organizations/${organization}/members`,
{
headers: {
Authorization: `Bearer ${accessToken}`
}
}
);
if (!response.ok) {
throw new Error(
`Failed to fetch organization members: ${response.statusText}`
);
}
return response.json();
}
async function createResourceGroup(accessToken, organization, name, members) {
const response = await fetch(
`https://huggingface.co/api/organizations/${organization}/resource-groups`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${accessToken}`
},
body: JSON.stringify({
name,
description: `Resource group for repository ${name}`,
users: members.map((member) => ({
user: member.user,
role: "admin"
}))
})
}
);
if (!response.ok) {
throw new Error(`Failed to create resource group: ${response.statusText}`);
}
}
async function createRepository(accessToken, name, organization, resourceGroupName) {
const response = await fetch("https://huggingface.co/api/repos/create", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${accessToken}`
},
body: JSON.stringify({
type: "model",
name,
organization,
private: false
})
});
if (!response.ok) {
throw new Error(`Failed to create repository: ${response.statusText}`);
}
if (organization && resourceGroupName) {
const members = await getOrganizationMembers(accessToken, organization);
await createResourceGroup(
accessToken,
organization,
resourceGroupName,
members
);
}
}
var init = async () => {
if (tokenManager.isAuthenticated()) {
showAuthenticatedUI();
} else {
showUnauthenticatedUI();
}
};
var showAuthenticatedUI = async () => {
const accessToken = tokenManager.getAccessToken();
if (!accessToken) {
throw new Error("Access token not found");
}
const tokenForm = document.getElementById("token-form");
if (tokenForm) {
tokenForm.style.display = "none";
}
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();
}
const createRepoButton = document.getElementById("create-repo");
const repoNameInput = document.getElementById(
"repo-name"
);
const resourceGroupInput = document.getElementById(
"resource-group-name"
);
const resourceGroupContainer = document.getElementById(
"resource-group-container"
);
if (createRepoButton && repoNameInput) {
createRepoButton.onclick = async () => {
const repoName = repoNameInput.value.trim();
const orgSelect2 = document.getElementById(
"org-select"
);
if (repoName) {
try {
const selectedOrg = orgSelect2?.value || void 0;
const resourceGroupName = selectedOrg ? resourceGroupInput?.value.trim() : void 0;
console.log({ selectedOrg, resourceGroupName });
await createRepository(
accessToken,
repoName,
selectedOrg,
resourceGroupName
);
repoNameInput.value = "";
if (resourceGroupInput) {
resourceGroupInput.value = "";
}
alert("Repository and resource group created successfully!");
} catch (error) {
console.error("Failed to create repository:", error);
alert("Failed to create repository. Please try again.");
}
}
};
}
const orgSelect = document.getElementById("org-select");
if (orgSelect && resourceGroupContainer) {
orgSelect.onchange = () => {
if (orgSelect.value) {
resourceGroupContainer.style.removeProperty("display");
} else {
resourceGroupContainer.style.display = "none";
}
};
}
try {
const orgInfo = await getOrganizationInfo(accessToken);
if (orgSelect && orgInfo.orgs) {
orgInfo.orgs.forEach((org) => {
const option = document.createElement("option");
option.value = org.name;
option.textContent = org.name;
orgSelect.appendChild(option);
});
}
const preElement = document.querySelector("pre");
if (preElement) {
preElement.textContent = JSON.stringify(orgInfo, null, 2);
}
} catch (error) {
console.error("Failed to fetch organization info:", error);
}
};
var showUnauthenticatedUI = () => {
const tokenForm = document.getElementById("token-form");
const tokenInput = document.getElementById("token-input");
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";
}
};
init().catch(console.error);