export interface User { name: string; id: number; statistics: { anime: { count: number; meanScore: number; minutesWatched: number; episodesWatched: number; }; manga: { count: number; meanScore: number; chaptersRead: number; volumesRead: number; }; }; avatar: { large: string; medium: string; }; bannerImage: string; } export interface FullUser { id: number; name: string; avatar: { large: string; medium: string; }; bans: JSON; bannerImage: string; siteUrl: string; donatorTier: number; donatorBadge: string; moderatorRoles: string[]; createAt: number; updatedAt: number; previousNames: { name: string; createdAt: number; updatedAt: string; }[]; about: string; } export const user = async ( username: string, id = false, ): Promise => { const response = await ( await fetch("https://graphql.anilist.co", { method: "POST", headers: { "Content-Type": "application/json", Accept: "application/json", }, body: JSON.stringify({ query: `{ User(${id ? `id: ${username}` : `name: "${username}"`}) { name id bannerImage avatar { large medium } statistics { anime { count meanScore minutesWatched episodesWatched } manga { count meanScore chaptersRead volumesRead } } } }`, }), }) ).json(); return response["data"]["User"] === null ? null : response["data"]["User"]; }; export const dumpUser = async (username: string): Promise => ( await ( await fetch("https://graphql.anilist.co", { method: "POST", headers: { "Content-Type": "application/json", Accept: "application/json", }, body: JSON.stringify({ query: `{ User(name: "${username}") { id name about avatar { large medium } bannerImage bans siteUrl donatorTier donatorBadge moderatorRoles createdAt updatedAt previousNames { name createdAt updatedAt } } }`, }), }) ).json() )["data"]["User"];