Files
ss-tools/frontend/e2e/helpers/api.helper.js
busya 6988e63967 chore: commit remaining pre-existing changes
- Agent configs (.opencode/agents/)
- Backend: alembic, routes, app, utils, scripts
- Frontend: package.json, vite, components, e2e infra
- Specs: 028-llm-datasource-supeset updates
- Docker e2e config and Playwright setup
2026-05-17 19:23:07 +03:00

90 lines
2.3 KiB
JavaScript

// #region ApiHelper [C:2] [TYPE Module] [SEMANTICS e2e, api, helper, auth]
// @BRIEF Helper for backend API calls in E2E tests (settings CRUD, etc.)
// @RELATION DEPENDS_ON -> [GlobalSetup]
const BACKEND_URL = process.env.BACKEND_URL || 'http://127.0.0.1:8101';
/**
* Get auth token from env (set during global-setup).
*/
function getToken() {
return process.env.E2E_TOKEN;
}
/**
* Make an authenticated GET request to the backend API.
*/
export async function apiGet(path) {
const token = getToken();
const res = await fetch(`${BACKEND_URL}${path}`, {
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
});
if (!res.ok) {
const body = await res.text().catch(() => '');
throw new Error(`GET ${path}${res.status}: ${body.slice(0, 200)}`);
}
return res.json();
}
/**
* Make an authenticated POST request to the backend API.
*/
export async function apiPost(path, body = {}) {
const token = getToken();
const res = await fetch(`${BACKEND_URL}${path}`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify(body),
});
if (!res.ok) {
const text = await res.text().catch(() => '');
throw new Error(`POST ${path}${res.status}: ${text.slice(0, 200)}`);
}
return res.status === 204 ? null : res.json();
}
/**
* Make an authenticated PUT request to the backend API.
*/
export async function apiPut(path, body = {}) {
const token = getToken();
const res = await fetch(`${BACKEND_URL}${path}`, {
method: 'PUT',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify(body),
});
if (!res.ok) {
const text = await res.text().catch(() => '');
throw new Error(`PUT ${path}${res.status}: ${text.slice(0, 200)}`);
}
return res.json();
}
/**
* Make an authenticated DELETE request to the backend API.
*/
export async function apiDelete(path) {
const token = getToken();
const res = await fetch(`${BACKEND_URL}${path}`, {
method: 'DELETE',
headers: {
'Authorization': `Bearer ${token}`,
},
});
if (!res.ok && res.status !== 204) {
const text = await res.text().catch(() => '');
throw new Error(`DELETE ${path}${res.status}: ${text.slice(0, 200)}`);
}
return res.status === 204 ? null : res.json();
}
// #endregion ApiHelper