Spaces:
Runtime error
Runtime error
// 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(); | |