fix: retry loading user if 429 returned

This commit is contained in:
2024-09-26 04:30:45 -04:00
parent bee8acaca8
commit e4ca45dbdc
2 changed files with 69 additions and 20 deletions

View File

@@ -1,6 +1,8 @@
import { graphql } from "gql.tada";
import { GraphQLClient } from "graphql-request";
import { sleep } from "~/libs/sleep";
const GetUserQuery = graphql(`
query GetUser {
Viewer {
@@ -21,22 +23,43 @@ const GetUserQuery = graphql(`
}
`);
export function getUser(aniListToken: string) {
type User = {
statistics: {
minutesWatched?: number | undefined;
episodesWatched?: number | undefined;
count?: number | undefined;
meanScore?: number | undefined;
};
name?: string | undefined;
avatar?:
| {
medium: string | null;
large: string | null;
}
| null
| undefined;
} | null;
export async function getUser(aniListToken: string): Promise<User> {
const client = new GraphQLClient("https://graphql.anilist.co/");
return client
.request(GetUserQuery, undefined, {
try {
const data = await client.request(GetUserQuery, undefined, {
Authorization: `Bearer ${aniListToken}`,
})
.then((data) => ({
});
return {
...data?.Viewer,
statistics: { ...data?.Viewer?.statistics?.anime },
}))
.catch((err) => {
if (err.response?.status === 401 || err.response?.status === 429) {
return null;
}
};
} catch (err) {
if (err.response?.status === 401) {
return null;
} else if (err.response?.status === 429) {
return sleep(
Number(err.response.headers.get("Retry-After")!) * 1000,
).then(() => getUser(aniListToken));
}
throw err;
});
throw err;
}
}