aboutsummaryrefslogtreecommitdiff
path: root/src/routes/api/animeschedule/+server.ts
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-06-05 11:10:22 +0000
committerFuwn <[email protected]>2026-06-05 11:10:22 +0000
commit4b56194ee6807acb56abf0949394efadabf830d4 (patch)
tree5cb2074a8d012bf9b7c900e7e44cbdfd0e15123f /src/routes/api/animeschedule/+server.ts
parentfix(lists): tick count down when media leaves a list (diff)
downloaddue.moe-4b56194ee6807acb56abf0949394efadabf830d4.tar.xz
due.moe-4b56194ee6807acb56abf0949394efadabf830d4.zip
feat(airing): replace SubsPlease with AnimeSchedule (sub+dub)
Source both subbed and dubbed episode schedules from AnimeSchedule.net v3 (absolute timestamps, episode numbers, delay windows, streams), keyed to AniList shows by title. Removes SubsPlease and its ~650-line fuzzy matcher. Countdown source is now a setting (native|sub|dub) with a dub->sub->native fallback. Requires ANIMESCHEDULE_CLIENT_TOKEN.
Diffstat (limited to 'src/routes/api/animeschedule/+server.ts')
-rw-r--r--src/routes/api/animeschedule/+server.ts25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/routes/api/animeschedule/+server.ts b/src/routes/api/animeschedule/+server.ts
new file mode 100644
index 00000000..c596bf41
--- /dev/null
+++ b/src/routes/api/animeschedule/+server.ts
@@ -0,0 +1,25 @@
+import { env } from "$env/dynamic/private";
+import { fetchTimetables } from "$lib/Media/Anime/Airing/animeSchedule";
+import { appOriginHeaders } from "$lib/Utility/appOrigin";
+
+export const GET = async () => {
+ const token = env.ANIMESCHEDULE_CLIENT_TOKEN;
+ const generatedAt = Math.floor(Date.now() / 1000);
+
+ if (!token)
+ return Response.json(
+ { generatedAt, sub: [], dub: [] },
+ { headers: appOriginHeaders({ "Cache-Control": "max-age=60" }) },
+ );
+
+ const { sub, dub } = await fetchTimetables(token);
+
+ return Response.json(
+ { generatedAt, sub, dub },
+ {
+ headers: appOriginHeaders({
+ "Cache-Control": "max-age=86400, s-maxage=86400",
+ }),
+ },
+ );
+};