160 lines
5.1 KiB
JavaScript
160 lines
5.1 KiB
JavaScript
// ── Raw HTTP wrappers ─────────────────────────────────────────────────────────
|
|
// These functions only perform fetch() calls and return the raw Response or
|
|
// parsed JSON. No state mutations, no DOM access.
|
|
|
|
export async function apiFetchConfig(team) {
|
|
const token = localStorage.getItem("authToken");
|
|
const headers = token ? { Authorization: `Bearer ${token}` } : {};
|
|
const res = await fetch(`/api/config?team=${encodeURIComponent(team)}`, {
|
|
headers,
|
|
cache: "no-store",
|
|
});
|
|
if (!res.ok) throw new Error("config_fetch_failed");
|
|
return res.json();
|
|
}
|
|
|
|
/** Returns the raw Response so the caller can inspect status codes (410, etc.). */
|
|
export async function apiFetchGrid(seed) {
|
|
const token = localStorage.getItem("authToken");
|
|
const headers = token ? { Authorization: `Bearer ${token}` } : {};
|
|
return fetch(`/api/grid/${encodeURIComponent(seed)}`, {
|
|
headers,
|
|
cache: "no-store",
|
|
});
|
|
}
|
|
|
|
/** Returns the raw Response so the caller can inspect status codes (409, 410, etc.). */
|
|
export async function apiRevealCell(seed, x, y, team) {
|
|
const token = localStorage.getItem("authToken");
|
|
return fetch("/api/cell/reveal", {
|
|
method: "POST",
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
...(token ? { Authorization: `Bearer ${token}` } : {}),
|
|
},
|
|
body: JSON.stringify({ seed, x, y, team }),
|
|
});
|
|
}
|
|
|
|
export async function apiLogin(username, password) {
|
|
return fetch("/api/auth/login", {
|
|
method: "POST",
|
|
headers: { "Content-Type": "application/json" },
|
|
body: JSON.stringify({ username, password }),
|
|
});
|
|
}
|
|
|
|
export async function apiRegister(username, password, team) {
|
|
return fetch("/api/auth/register", {
|
|
method: "POST",
|
|
headers: { "Content-Type": "application/json" },
|
|
body: JSON.stringify({ username, password, team }),
|
|
});
|
|
}
|
|
|
|
export async function apiGetMe(token) {
|
|
return fetch("/api/auth/me", {
|
|
headers: { Authorization: `Bearer ${token}` },
|
|
});
|
|
}
|
|
|
|
export async function apiFetchEconScores() {
|
|
const res = await fetch("/api/econ-scores");
|
|
if (!res.ok) throw new Error("econ_scores_fetch_failed");
|
|
return res.json();
|
|
}
|
|
|
|
export async function apiTickEconScores(seed, blue, red) {
|
|
const res = await fetch("/api/econ-scores/tick", {
|
|
method: "POST",
|
|
headers: { "Content-Type": "application/json" },
|
|
body: JSON.stringify({ seed, blue, red }),
|
|
});
|
|
if (!res.ok) throw new Error("econ_tick_failed");
|
|
return res.json();
|
|
}
|
|
|
|
export async function apiFetchElementBonus() {
|
|
const res = await fetch("/api/element-bonus");
|
|
if (!res.ok) throw new Error("element_bonus_fetch_failed");
|
|
return res.json();
|
|
}
|
|
|
|
export async function apiTickElementBonus(seed, blue, red) {
|
|
const res = await fetch("/api/element-bonus/tick", {
|
|
method: "POST",
|
|
headers: { "Content-Type": "application/json" },
|
|
body: JSON.stringify({ seed, blue, red }),
|
|
});
|
|
if (!res.ok) throw new Error("element_bonus_tick_failed");
|
|
return res.json();
|
|
}
|
|
|
|
export async function apiFetchDbInfo() {
|
|
const res = await fetch("/api/db-info");
|
|
if (!res.ok) throw new Error("db_info_fetch_failed");
|
|
return res.json();
|
|
}
|
|
|
|
export async function apiFetchVictoryPoints() {
|
|
const res = await fetch("/api/victory-points");
|
|
if (!res.ok) throw new Error("vp_fetch_failed");
|
|
return res.json();
|
|
}
|
|
|
|
export async function apiFetchPlayerCounts() {
|
|
const res = await fetch("/api/auth/player-counts");
|
|
if (!res.ok) throw new Error("player_counts_fetch_failed");
|
|
return res.json();
|
|
}
|
|
|
|
export async function apiFetchActivePlayers() {
|
|
const res = await fetch("/api/active-players");
|
|
if (!res.ok) throw new Error("active_players_fetch_failed");
|
|
return res.json();
|
|
}
|
|
|
|
export async function apiFetchActivePlayerNames() {
|
|
const res = await fetch("/api/active-players/names");
|
|
if (!res.ok) throw new Error("active_player_names_fetch_failed");
|
|
return res.json();
|
|
}
|
|
|
|
export async function apiFetchMilitaryDeductions() {
|
|
const res = await fetch("/api/military-deductions");
|
|
if (!res.ok) throw new Error("military_deductions_fetch_failed");
|
|
return res.json();
|
|
}
|
|
|
|
export async function apiMilitaryAttack(seed, x, y) {
|
|
const token = localStorage.getItem("authToken");
|
|
const res = await fetch("/api/military/attack", {
|
|
method: "POST",
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
...(token ? { Authorization: `Bearer ${token}` } : {}),
|
|
},
|
|
body: JSON.stringify({ seed, x, y }),
|
|
});
|
|
return res; // caller inspects status
|
|
}
|
|
|
|
export async function apiFetchCellAttackCount(x, y) {
|
|
const res = await fetch(`/api/cell/attacks?x=${x}&y=${y}`);
|
|
if (!res.ok) throw new Error("cell_attacks_fetch_failed");
|
|
return res.json();
|
|
}
|
|
|
|
/** Returns the raw Response so the caller can inspect status codes. */
|
|
export async function apiCaptureCell(seed, x, y) {
|
|
const token = localStorage.getItem("authToken");
|
|
return fetch("/api/cell/capture", {
|
|
method: "POST",
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
...(token ? { Authorization: `Bearer ${token}` } : {}),
|
|
},
|
|
body: JSON.stringify({ seed, x, y }),
|
|
});
|
|
}
|