57 lines
1.6 KiB
TypeScript
57 lines
1.6 KiB
TypeScript
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<SpigetResource[]> {
|
|
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<SpigetResource[]>;
|
|
}
|
|
|
|
export async function getSpigetResource(id: number): Promise<SpigetResource | null> {
|
|
const res = await fetch(`${SPIGET_BASE}/resources/${id}`, {
|
|
headers: { 'User-Agent': 'GamePanel/1.0' },
|
|
});
|
|
if (!res.ok) return null;
|
|
return res.json() as Promise<SpigetResource>;
|
|
}
|
|
|
|
export async function getSpigetVersions(resourceId: number): Promise<SpigetVersion[]> {
|
|
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<SpigetVersion[]>;
|
|
}
|
|
|
|
export function getSpigetDownloadUrl(resourceId: number): string {
|
|
return `${SPIGET_BASE}/resources/${resourceId}/download`;
|
|
}
|