diff options
| author | Fuwn <[email protected]> | 2023-12-10 02:19:28 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2023-12-10 02:34:52 -0800 |
| commit | e8bf266e5f487f7c444baf16bbabf1f4e4c2bdad (patch) | |
| tree | 7dff6a98a33392670e8b0085d7ea98904d1420a2 /src/routes/api | |
| parent | feat(page): use video always (diff) | |
| download | due.moe-e8bf266e5f487f7c444baf16bbabf1f4e4c2bdad.tar.xz due.moe-e8bf266e5f487f7c444baf16bbabf1f4e4c2bdad.zip | |
feat(mangadex): add safe rate limits
Diffstat (limited to 'src/routes/api')
| -rw-r--r-- | src/routes/api/mangadex/chapter/+server.ts | 26 | ||||
| -rw-r--r-- | src/routes/api/mangadex/feed/+server.ts | 22 | ||||
| -rw-r--r-- | src/routes/api/mangadex/manga/+server.ts | 21 |
3 files changed, 42 insertions, 27 deletions
diff --git a/src/routes/api/mangadex/chapter/+server.ts b/src/routes/api/mangadex/chapter/+server.ts index b4b1a11d..602427ba 100644 --- a/src/routes/api/mangadex/chapter/+server.ts +++ b/src/routes/api/mangadex/chapter/+server.ts @@ -1,13 +1,17 @@ export const GET = async ({ url }) => { - return Response.json( - await ( - await fetch( - `https://api.mangadex.org/chapter?manga=${url.searchParams.get( - 'id' - )}&chapter=${url.searchParams.get( - 'chapter' - )}&contentRating[]=safe&contentRating[]=suggestive&contentRating[]=erotica&contentRating[]=pornographic&limit=1` - ) - ).json() - ); + try { + return Response.json( + await ( + await fetch( + `https://api.mangadex.org/chapter?manga=${url.searchParams.get( + 'id' + )}&chapter=${url.searchParams.get( + 'chapter' + )}&contentRating[]=safe&contentRating[]=suggestive&contentRating[]=erotica&contentRating[]=pornographic&limit=1` + ) + ).json() + ); + } catch { + return new Response('rate-limited'); + } }; diff --git a/src/routes/api/mangadex/feed/+server.ts b/src/routes/api/mangadex/feed/+server.ts index 862ef5e4..ab28ba2b 100644 --- a/src/routes/api/mangadex/feed/+server.ts +++ b/src/routes/api/mangadex/feed/+server.ts @@ -1,11 +1,15 @@ export const GET = async ({ url }) => { - return Response.json( - await ( - await fetch( - `https://api.mangadex.org/manga/${url.searchParams.get( - 'id' - )}/feed?order[chapter]=desc&translatedLanguage[]=en&limit=1&contentRating[]=safe&contentRating[]=suggestive&contentRating[]=erotica&contentRating[]=pornographic` - ) - ).json() - ); + try { + return Response.json( + await ( + await fetch( + `https://api.mangadex.org/manga/${url.searchParams.get( + 'id' + )}/feed?order[chapter]=desc&translatedLanguage[]=en&limit=1&contentRating[]=safe&contentRating[]=suggestive&contentRating[]=erotica&contentRating[]=pornographic` + ) + ).json() + ); + } catch { + return new Response('rate-limited'); + } }; diff --git a/src/routes/api/mangadex/manga/+server.ts b/src/routes/api/mangadex/manga/+server.ts index c2c75082..e80d0b6a 100644 --- a/src/routes/api/mangadex/manga/+server.ts +++ b/src/routes/api/mangadex/manga/+server.ts @@ -1,5 +1,6 @@ export const GET = async ({ url }) => { let status = ''; + let error = false; switch (url.searchParams.get('status')) { case 'FINISHED': @@ -26,13 +27,17 @@ export const GET = async ({ url }) => { const nullIfNullString = (s: string | null) => (s == 'null' ? null : s); const get = async (title: string) => { - return await ( - await fetch( - `https://api.mangadex.org/manga?title=${encodeURIComponent( - title - )}&year=${url.searchParams.get('year')}&status[]=${status}` - ) - ).json(); + 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( @@ -42,6 +47,8 @@ export const GET = async ({ url }) => { '' ); + if (error) return new Response('rate-limited'); + if (mangadexData['data'] === undefined || mangadexData['data'].length === 0) { mangadexData = await get(nullIfNullString(url.searchParams.get('english')) || ''); |