fix: retry loading user if 429 returned
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user