export interface Character { name: { full: string; }; id: number; } export interface CharactersPage { data: { Page: { characters: Character[]; pageInfo: { hasNextPage: boolean; currentPage: number; }; }; }; } const charactersPage = async (page: number): Promise => await ( await fetch('https://graphql.anilist.co', { method: 'POST', headers: { 'Content-Type': 'application/json', Accept: 'application/json' }, body: JSON.stringify({ query: `{ Page(page: ${page}, perPage: 50) { characters(isBirthday: true) { name { full } id } pageInfo { hasNextPage currentPage } } }` }) }) ).json(); export const todaysCharacterBirthdays = async (): Promise => { const characters = []; let page = 1; let currentPage = await charactersPage(page); for (const character of currentPage['data']['Page']['characters']) { characters.push({ id: character['id'], name: { full: character['name']['full'] } }); } while (currentPage['data']['Page']['pageInfo']['hasNextPage']) { for (const character of currentPage['data']['Page']['characters']) { characters.push({ id: character['id'], name: { full: character['name']['full'] } }); } page += 1; currentPage = await charactersPage(page); } return characters; };