Spaces:
Runtime error
Runtime error
File size: 4,206 Bytes
16c1c4c 58ae063 ee999fe 58ae063 ee999fe c433511 84f514d c433511 84f514d c433511 58ae063 16c1c4c 58ae063 c433511 84f514d c433511 84f514d c433511 84f514d ee999fe 16c1c4c 84f514d ee999fe 16c1c4c ee999fe 58ae063 16c1c4c 58ae063 16c1c4c 58ae063 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
import { oauthManager, HuggingFaceWindow } from "./oauth";
interface OrganizationInfo {
type: string;
id: string;
name: string;
role: string;
}
interface WhoAmIResponse {
type: string;
id: string;
name: string;
email?: string;
fullname?: string;
avatarUrl?: string;
organizations: OrganizationInfo[];
}
declare const window: HuggingFaceWindow;
console.log("huggingface env", window.huggingface);
async function getOrganizationInfo(
accessToken: string
): Promise<WhoAmIResponse> {
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 createRepository(
accessToken: string,
name: string,
organization?: string
): Promise<void> {
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: name,
organization: organization,
private: false,
}),
});
if (!response.ok) {
throw new Error(`Failed to create repository: ${response.statusText}`);
}
}
const init = async (): Promise<void> => {
await oauthManager.handleRedirect();
if (oauthManager.isAuthenticated()) {
const accessToken = oauthManager.getAccessToken();
if (!accessToken) {
throw new Error("Access token not found");
}
// Show repo form when logged in
const repoForm = document.getElementById("repo-form");
if (repoForm) {
repoForm.style.removeProperty("display");
}
// Add create repo functionality
const createRepoButton = document.getElementById("create-repo");
const repoNameInput = document.getElementById(
"repo-name"
) as HTMLInputElement;
if (createRepoButton && repoNameInput) {
createRepoButton.onclick = async () => {
const repoName = repoNameInput.value.trim();
const orgSelect = document.getElementById(
"org-select"
) as HTMLSelectElement;
if (repoName) {
try {
const selectedOrg = orgSelect?.value || undefined;
await createRepository(accessToken, repoName, selectedOrg);
repoNameInput.value = ""; // Clear input after success
alert("Repository created successfully!");
} catch (error) {
console.error("Failed to create repository:", error);
alert("Failed to create repository. Please try again.");
}
}
};
}
// Get organization info and populate org select after successful authentication
try {
const orgInfo = await getOrganizationInfo(accessToken);
// Populate org select
const orgSelect = document.getElementById(
"org-select"
) as HTMLSelectElement;
if (orgSelect && orgInfo.organizations) {
orgInfo.organizations.forEach((org) => {
const option = document.createElement("option");
option.value = org.name;
option.textContent = org.name;
orgSelect.appendChild(option);
});
}
// Display full info in pre element
const preElement = document.querySelector("pre");
if (preElement) {
preElement.textContent = JSON.stringify(
{
oauth: oauthManager.getAccessToken(),
user: orgInfo,
},
null,
2
);
}
} catch (error) {
console.error("Failed to fetch organization info:", error);
}
const signoutButton = document.getElementById("signout");
if (signoutButton) {
signoutButton.style.removeProperty("display");
signoutButton.onclick = () => oauthManager.logout();
}
} else {
const signinButton = document.getElementById("signin");
if (signinButton) {
signinButton.style.removeProperty("display");
signinButton.onclick = () => oauthManager.initiateLogin();
}
}
};
init().catch(console.error);
|