// Server-side API helpers for metadata generation. // Runs only on the server (Node.js) — uses NEXT_PUBLIC_HOST_URL which is inlined at build time. import { IMod } from '@/src/types/Imod'; import { Irace } from '@/src/types/Irace'; import { IRaceUnits } from '@/src/types/IUnitShort'; import { IRaceBuildings } from '@/src/types/IBuildingShort'; import { IUnit } from '@/src/types/IUnit'; import { IBuilding } from '@/src/types/IBuilding'; const API = process.env.NEXT_PUBLIC_HOST_URL || ''; export const SITE_URL = process.env.NEXT_PUBLIC_SITE_URL || 'https://dow-wiki.example.com'; async function fetchJson(url: string): Promise { try { const res = await fetch(url, { cache: 'no-store' }); if (!res.ok) return null; return (await res.json()) as T; } catch { return null; } } export async function getMod(modId: string) { return fetchJson(`${API}/api/v1/mods/${modId}`); } export async function getRace(raceId: string) { return fetchJson(`${API}/api/v1/races/${raceId}`); } export async function getUnit(unitId: string) { return fetchJson(`${API}/api/v1/units/${unitId}`); } export async function getBuilding(buildingId: string) { return fetchJson(`${API}/api/v1/buildings/${buildingId}`); } export async function getMods() { return fetchJson(`${API}/api/v1/mods`); } export async function getRacesForMod(modId: string | number) { return fetchJson>(`${API}/api/v1/units/mod/${modId}`); } export async function getUnitsForMod(modId: string | number) { return fetchJson(`${API}/api/v1/units/mod/${modId}`); } export async function getBuildingsForMod(modId: string | number) { return fetchJson(`${API}/api/v1/buildings/mod/${modId}`); } export async function getRaceUnits(modId: string | number, raceId: string) { return fetchJson(`${API}/api/v1/units/${modId}/${raceId}`); } export async function getRaceBuildings(modId: string | number, raceId: string) { return fetchJson(`${API}/api/v1/buildings/${modId}/${raceId}`); }