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'];