aboutsummaryrefslogtreecommitdiff
path: root/src/routes/api
diff options
context:
space:
mode:
authorFuwn <[email protected]>2023-12-10 02:19:28 -0800
committerFuwn <[email protected]>2023-12-10 02:34:52 -0800
commite8bf266e5f487f7c444baf16bbabf1f4e4c2bdad (patch)
tree7dff6a98a33392670e8b0085d7ea98904d1420a2 /src/routes/api
parentfeat(page): use video always (diff)
downloaddue.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.ts26
-rw-r--r--src/routes/api/mangadex/feed/+server.ts22
-rw-r--r--src/routes/api/mangadex/manga/+server.ts21
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')) || '');