39 lines
881 B
TypeScript
39 lines
881 B
TypeScript
import { graphql } from "gql.tada";
|
|
import { GraphQLClient } from "graphql-request";
|
|
|
|
import type { Title } from "~/types/title";
|
|
import { MediaFragment } from "~/types/title/mediaFragment";
|
|
|
|
const GetTitleQuery = graphql(
|
|
`
|
|
query GetTitle($id: Int!) {
|
|
Media(id: $id) {
|
|
...Media
|
|
}
|
|
}
|
|
`,
|
|
[MediaFragment],
|
|
);
|
|
|
|
export async function fetchTitleFromAnilist(
|
|
id: number,
|
|
token: string | undefined,
|
|
): Promise<Title | undefined> {
|
|
const client = new GraphQLClient("https://graphql.anilist.co/");
|
|
const headers = new Headers();
|
|
if (token) {
|
|
headers.append("Authorization", `Bearer ${token}`);
|
|
}
|
|
|
|
return client
|
|
.request(GetTitleQuery, { id }, headers)
|
|
.then((data) => data?.Media ?? undefined)
|
|
.catch((error) => {
|
|
if (error.message.includes("Not Found")) {
|
|
return undefined;
|
|
}
|
|
|
|
throw error;
|
|
});
|
|
}
|