// 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();