From 9254703c08937ae60ac2b08a5d3d6fcf0b02b169 Mon Sep 17 00:00:00 2001 From: Radiquum Date: Wed, 9 Jul 2025 02:12:50 +0500 Subject: [PATCH] eat/api-prox: add request timeout to release.ts hook --- api-prox/hooks/release.ts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/api-prox/hooks/release.ts b/api-prox/hooks/release.ts index 2ba4c13..a9a8b28 100644 --- a/api-prox/hooks/release.ts +++ b/api-prox/hooks/release.ts @@ -7,11 +7,14 @@ export function match(path: string): boolean { return false; } +const timeout = 5000; // таймаут запроса к внешнему апи на 5 секунд + async function fetchShikiRating(title: string) { try { // ищём аниме на шикимори по названию, т.к. ид аниме аниксарт и шикимори разные и нет никакого референса друг на друга const shikiIdRes = await fetch( - `https://shikimori.one/api/animes?search=${title}` + `https://shikimori.one/api/animes?search=${title}`, + { signal: AbortSignal.timeout(timeout) } ); if (!shikiIdRes.ok) throw new Error(); // если при поиске произошла ошибка, то возвращаем null @@ -23,7 +26,8 @@ async function fetchShikiRating(title: string) { // повторяем процесс, уже с ид от шикимори const shikiAnimRes = await fetch( - `https://shikimori.one/api/animes/${shikiId}` + `https://shikimori.one/api/animes/${shikiId}`, + { signal: AbortSignal.timeout(timeout) } ); if (!shikiAnimRes.ok) throw new Error(); // если при произошла ошибка, то возвращаем null const shikiAnimJson = await shikiAnimRes.json(); @@ -38,7 +42,9 @@ async function fetchShikiRating(title: string) { async function fetchMALRating(title: string) { try { // ищём аниме на MAL по названию, через API Jikan, т.к. ид аниме аниксарт и шикимори разные и нет никакого референса друг на друга - const malRes = await fetch(`https://api.jikan.moe/v4/anime?q=${title}`); + const malRes = await fetch(`https://api.jikan.moe/v4/anime?q=${title}`, { + signal: AbortSignal.timeout(timeout), + }); if (!malRes.ok) throw new Error(); // если при поиске произошла ошибка, то возвращаем null const malJson = await malRes.json(); @@ -63,7 +69,9 @@ export async function get(data: any, url: URL) { // пушим строки в список, что-бы было легче их объединить const noteBuilder = []; if (data["release"]["note"]) noteBuilder.push(`${data.release.note}`); // первым добавляем оригинальное значение примечания, если оно есть - data["release"]["note"] && (shikimoriRating || malRating) && noteBuilder.push("------"); // добавляем разделитель, если есть рейтинг и оригинальное примечание + data["release"]["note"] && + (shikimoriRating || malRating) && + noteBuilder.push("------"); // добавляем разделитель, если есть рейтинг и оригинальное примечание shikimoriRating && noteBuilder.push(`Рейтинг Shikimori: ${shikimoriRating}★`); // добавляем рейтинг от шикимори malRating && noteBuilder.push(`Рейтинг My Anime List: ${malRating}★`); // добавляем рейтинг от MAL