Newer
Older
gnexus-creds-extension / src / api.js
/**
 * 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);
}