whdemo / dist /main.js
Charlie
update files
78d0a80
raw
history blame
5.35 kB
// src/token.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/client.ts
var Client = class {
constructor(baseUrl2, token) {
this.baseUrl = baseUrl2.endsWith("/") ? baseUrl2.slice(0, -1) : baseUrl2;
this.token = token;
}
getHeaders(contentType) {
const headers = {
Authorization: `Bearer ${this.token}`
};
if (contentType) {
headers["Content-Type"] = contentType;
}
return headers;
}
async handleResponse(response) {
if (!response.ok) {
throw new Error(`API request failed: ${response.statusText}`);
}
return response.json();
}
async get(path) {
const url = `${this.baseUrl}${path.startsWith("/") ? path : "/" + path}`;
const response = await fetch(url, {
headers: this.getHeaders()
});
return this.handleResponse(response);
}
async post(path, payload) {
const url = `${this.baseUrl}${path.startsWith("/") ? path : "/" + path}`;
const response = await fetch(url, {
method: "POST",
headers: this.getHeaders("application/json"),
body: JSON.stringify(payload)
});
return this.handleResponse(response);
}
};
// src/main.ts
var baseUrl = "https://huggingface.co/api";
var showAuthenticatedUI = async () => {
const accessToken = tokenManager.getAccessToken();
if (!accessToken) {
throw new Error("Access token not found");
}
const client = new Client(baseUrl, accessToken);
const tokenForm = document.getElementById("token-form");
const repoForm = document.getElementById("repo-form");
const signoutButton = document.getElementById("signout");
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"
);
tokenForm.style.display = "none";
repoForm.style.removeProperty("display");
signoutButton.style.removeProperty("display");
signoutButton.onclick = () => tokenManager.logout();
createRepoButton.onclick = async () => {
const repoName = repoNameInput.value;
if (!repoName)
return alert("Provide a repo name");
const orgSelect2 = document.getElementById("org-select");
const originalButtonText = createRepoButton.textContent;
createRepoButton.textContent = "Creating...";
createRepoButton.disabled = true;
try {
const organizationName = orgSelect2?.value || void 0;
const resourceGroupName = organizationName ? resourceGroupInput?.value : void 0;
const repo = await client.post("repos/create", {
type: "model",
name: repoName,
organization: organizationName,
private: true
});
if (resourceGroupName) {
await client.post(
`organizations/${organizationName}/resource-groups`,
{
name: resourceGroupName,
description: `Resource group for repository ${repo.name}`,
repos: [{ ...repo, type: "model" }],
autoJoin: {
enabled: true,
role: "admin"
}
}
);
}
alert("Repository and resource group created successfully!");
} catch (error) {
console.error(error);
alert("Failed to create repository");
} finally {
createRepoButton.textContent = originalButtonText;
createRepoButton.disabled = false;
}
};
const orgSelect = document.getElementById("org-select");
orgSelect.onchange = () => {
if (orgSelect.value) {
resourceGroupContainer.style.removeProperty("display");
} else {
resourceGroupContainer.style.display = "none";
}
};
try {
const userInfo = await client.get("whoami-v2");
if (userInfo.orgs.length) {
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);
}
};
var showUnauthenticatedUI = () => {
const tokenForm = document.getElementById("token-form");
const tokenInput = document.getElementById("token-input");
const tokenSubmit = document.getElementById("token-submit");
const repoForm = document.getElementById("repo-form");
const signoutButton = document.getElementById("signout");
tokenForm.style.removeProperty("display");
tokenSubmit.onclick = () => {
const token = tokenInput.value;
if (token) {
tokenManager.setToken(token);
showAuthenticatedUI();
}
};
repoForm.style.display = "none";
signoutButton.style.display = "none";
};
var init = async () => {
if (tokenManager.isAuthenticated()) {
showAuthenticatedUI();
} else {
showUnauthenticatedUI();
}
};
init();