/**
* API client for gnexus-creds REST API.
*/
async function request(path, options = {}, token, baseUrl) {
const url = `${baseUrl}${path}`;
const headers = {
Accept: "application/json",
...(options.body ? { "Content-Type": "application/json" } : {}),
...(token ? { Authorization: `Bearer ${token}` } : {}),
...(options.headers || {}),
};
const response = await fetch(url, { ...options, headers });
if (response.status === 204) return null;
const payload = await response.json().catch(() => ({}));
if (!response.ok) {
throw new Error(payload?.error?.message || `HTTP ${response.status}`);
}
return payload;
}
export async function listSecrets(token, baseUrl, params = {}) {
const query = new URLSearchParams({ limit: "50", ...params });
return request(`/api/v1/secrets?${query}`, {}, token, baseUrl);
}
export async function createSecret(token, baseUrl, payload) {
return request(`/api/v1/secrets`, { method: "POST", body: JSON.stringify(payload) }, token, baseUrl);
}
export async function revealSecret(token, baseUrl, id) {
return request(`/api/v1/secrets/${id}/reveal`, { method: "POST" }, token, baseUrl);
}
export async function getMe(token, baseUrl) {
return request(`/api/v1/me`, {}, token, baseUrl);
}
export async function getCategories(token, baseUrl) {
return request(`/api/v1/categories`, {}, token, baseUrl);
}