function normalizeServerUrl(serverUrl) { return serverUrl.trim().replace(/\/+$/, ""); } export function buildApiBaseUrl(serverUrl) { const normalized = normalizeServerUrl(serverUrl); return normalized.endsWith("/api/v1") ? normalized : `${normalized}/api/v1`; } export function buildHeaders(serverConfig) { const headers = { Accept: "application/json", }; if (serverConfig.authMethod === "token" && serverConfig.token) { headers.Authorization = `token ${serverConfig.token}`; } else if ( serverConfig.authMethod === "password" && serverConfig.username && serverConfig.password ) { headers.Authorization = `Basic ${btoa( `${serverConfig.username}:${serverConfig.password}` )}`; } return headers; } export async function fetchRepositories(serverConfig, page = 1, limit = 50) { const apiBase = buildApiBaseUrl(serverConfig.serverUrl); const url = `${apiBase}/user/repos?page=${page}&limit=${limit}&sort=updated`; const response = await fetch(url, { headers: buildHeaders(serverConfig), }); if (!response.ok) { throw new Error(`Gitea API error: ${response.status}`); } return response.json(); }