HomePilot / frontend /src /agentic /useAgenticCatalog.js
HomePilot Deploy Bot
chore(hf): sync HomePilot to HF Space
921d377
Raw
History Blame Contribute Delete
2.05 kB
/**
* React hook for fetching and refreshing the agentic catalog.
*
* Returns { catalog, loading, error, refresh } so the wizard
* can render tools, servers, agents and trigger manual refreshes.
*/
import { useCallback, useEffect, useState } from 'react';
export function useAgenticCatalog({ backendUrl, apiKey, enabled = true }) {
const [catalog, setCatalog] = useState(null);
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null);
const fetchCatalog = useCallback(async () => {
if (!enabled)
return;
setLoading(true);
setError(null);
try {
const headers = {};
if (apiKey)
headers['x-api-key'] = apiKey;
// Additive: logged-in user session fallback. The backend's
// require_api_key now accepts a valid bearer JWT / session
// cookie as an alternative to the shared API key — see
// backend/app/auth.py. Send both so either path succeeds.
try {
if (typeof window !== 'undefined') {
const tok = window.localStorage.getItem('homepilot_auth_token') || '';
if (tok)
headers['authorization'] = `Bearer ${tok}`;
}
}
catch { /* ignore storage errors */ }
const res = await fetch(`${backendUrl}/v1/agentic/catalog`, {
headers,
credentials: 'include',
});
if (!res.ok)
throw new Error(`HTTP ${res.status}`);
const data = (await res.json());
setCatalog(data);
}
catch (e) {
setCatalog(null);
setError(e?.message || 'Failed to load catalog');
}
finally {
setLoading(false);
}
}, [backendUrl, apiKey, enabled]);
useEffect(() => {
void fetchCatalog();
}, [fetchCatalog]);
return { catalog, loading, error, refresh: fetchCatalog };
}