63 lines
2.1 KiB
TypeScript
63 lines
2.1 KiB
TypeScript
// Server-side API helpers for metadata generation.
|
|
// Runs only on the server (Node.js) — uses HOST_URL (not exposed to the browser).
|
|
|
|
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.HOST_URL || '';
|
|
export const SITE_URL = process.env.NEXT_PUBLIC_SITE_URL || 'https://wiki.dawn-of-war.pro';
|
|
|
|
async function fetchJson<T>(url: string): Promise<T | null> {
|
|
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<IMod>(`${API}/api/v1/mods/${modId}`);
|
|
}
|
|
|
|
export async function getRace(raceId: string) {
|
|
return fetchJson<Irace>(`${API}/api/v1/races/${raceId}`);
|
|
}
|
|
|
|
export async function getUnit(unitId: string) {
|
|
return fetchJson<IUnit>(`${API}/api/v1/units/${unitId}`);
|
|
}
|
|
|
|
export async function getBuilding(buildingId: string) {
|
|
return fetchJson<IBuilding>(`${API}/api/v1/buildings/${buildingId}`);
|
|
}
|
|
|
|
export async function getMods() {
|
|
return fetchJson<IMod[]>(`${API}/api/v1/mods`);
|
|
}
|
|
|
|
export async function getRacesForMod(modId: string | number) {
|
|
return fetchJson<Array<{ race: { id: string; name: string } }>>(`${API}/api/v1/units/mod/${modId}`);
|
|
}
|
|
|
|
export async function getUnitsForMod(modId: string | number) {
|
|
return fetchJson<IRaceUnits[]>(`${API}/api/v1/units/mod/${modId}`);
|
|
}
|
|
|
|
export async function getBuildingsForMod(modId: string | number) {
|
|
return fetchJson<IRaceBuildings[]>(`${API}/api/v1/buildings/mod/${modId}`);
|
|
}
|
|
|
|
export async function getRaceUnits(modId: string | number, raceId: string) {
|
|
return fetchJson<IRaceUnits>(`${API}/api/v1/units/${modId}/${raceId}`);
|
|
}
|
|
|
|
export async function getRaceBuildings(modId: string | number, raceId: string) {
|
|
return fetchJson<IRaceBuildings>(`${API}/api/v1/buildings/${modId}/${raceId}`);
|
|
}
|