61 lines
1.4 KiB
TypeScript
61 lines
1.4 KiB
TypeScript
import { Episode, type EpisodesResponse } from "./episode";
|
|
|
|
export async function getEpisodesFromAmvstrm(
|
|
aniListId: number,
|
|
): Promise<EpisodesResponse | null> {
|
|
try {
|
|
const episodes: Episode[] | null = await fetch(
|
|
`https://api.amvstr.me/api/v2/episode/${aniListId}`,
|
|
)
|
|
.then((res) => res.json<AmvstrmEpisodesResponse>())
|
|
.then(({ code, message, episodes }) => {
|
|
if (code >= 400) {
|
|
console.error(
|
|
`Error trying to load episodes from amvstrm; aniListId: ${aniListId}, code: ${code}, message: ${message}`,
|
|
);
|
|
return null;
|
|
}
|
|
|
|
return episodes.map<Episode>(
|
|
({ id, description, image, title, episode, airDate }) => ({
|
|
id,
|
|
number: episode,
|
|
description,
|
|
img: image,
|
|
title,
|
|
updatedAt: airDate ?? 0,
|
|
}),
|
|
);
|
|
});
|
|
if (!episodes || episodes.length === 0) {
|
|
return null;
|
|
}
|
|
|
|
return { providerId: "amvstrm", episodes };
|
|
} catch (error) {
|
|
console.error(
|
|
new Error(
|
|
`Error trying to load episodes from amvstrm; aniListId: ${aniListId}`,
|
|
{ cause: error },
|
|
),
|
|
);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
interface AmvstrmEpisodesResponse {
|
|
code: number;
|
|
message: string;
|
|
episodes: AmvstrmEpisode[];
|
|
}
|
|
|
|
interface AmvstrmEpisode {
|
|
id: string;
|
|
title: string;
|
|
description: string | null;
|
|
episode: number;
|
|
image: string;
|
|
airDate: null;
|
|
}
|