const SPIGET_BASE = 'https://api.spiget.org/v2'; export interface SpigetResource { id: number; name: string; tag: string; icon: { url: string; data: string }; releaseDate: number; updateDate: number; downloads: number; rating: { average: number; count: number }; file: { type: string; size: number; url: string }; version: { id: number }; external: boolean; } export interface SpigetVersion { id: number; name: string; releaseDate: number; downloads: number; url: string; } export async function searchSpigetPlugins( query: string, page = 1, size = 20, ): Promise { const res = await fetch( `${SPIGET_BASE}/search/resources/${encodeURIComponent(query)}?size=${size}&page=${page}&sort=-downloads`, { headers: { 'User-Agent': 'GamePanel/1.0' } }, ); if (!res.ok) return []; return res.json() as Promise; } export async function getSpigetResource(id: number): Promise { const res = await fetch(`${SPIGET_BASE}/resources/${id}`, { headers: { 'User-Agent': 'GamePanel/1.0' }, }); if (!res.ok) return null; return res.json() as Promise; } export async function getSpigetVersions(resourceId: number): Promise { const res = await fetch(`${SPIGET_BASE}/resources/${resourceId}/versions?sort=-releaseDate`, { headers: { 'User-Agent': 'GamePanel/1.0' }, }); if (!res.ok) return []; return res.json() as Promise; } export function getSpigetDownloadUrl(resourceId: number): string { return `${SPIGET_BASE}/resources/${resourceId}/download`; }