import { checkRateLimit } from '$lib/rateLimit.js'; export const GET = async (event) => { const limit = await checkRateLimit(event); const { url } = event; if (limit) return limit; let status = ''; let error = false; switch (url.searchParams.get('status')) { case 'FINISHED': { status = 'completed'; } break; case 'RELEASING': { status = 'ongoing'; } break; case 'HIATUS': { status = 'hiatus'; } break; case 'CANCELLED': { status = 'cancelled'; } break; } const nullIfNullString = (s: string | null) => (s == 'null' ? null : s); const get = async (title: string) => { try { return await ( await fetch( `https://api.mangadex.org/manga?title=${encodeURIComponent( title )}&year=${url.searchParams.get('year')}&status[]=${status}` ) ).json(); } catch { error = true; } }; let mangadexData = await get( nullIfNullString(url.searchParams.get('native')) || nullIfNullString(url.searchParams.get('english')) || nullIfNullString(url.searchParams.get('romaji')) || '' ); if (error) return new Response('rate-limited'); if (mangadexData['data'] === undefined || mangadexData['data'].length === 0) { mangadexData = await get(nullIfNullString(url.searchParams.get('english')) || ''); if (mangadexData['data'] === undefined || mangadexData['data'].length === 0) { mangadexData = await get(nullIfNullString(url.searchParams.get('romaji')) || ''); } } return Response.json(mangadexData, { headers: { 'Cache-Control': 'max-age=300' } }); };