/**
* @typedef { Object } InitOptions
* @property { Number } timeout - A number in milliseconds which defines a timeout when making requests
*/
/**
* @typedef { Object } MediaTitle
* @enum
* @property { String } english - The offical English licensed title
* @property { String } native - The Japanese title in Japanese
* @property { String } romaji - The Japanese romanized title
* @property { String } userPreferred - The title as it would be displayed to the user
*/
/**
* @typedef { Object } PersonName
* @enum
* @property { String } english - The person's first and last name in English
* @property { String } native - The person's name in Japanese
* @property { String[] } alternative - Any nicknames or titles the person goes by.
*/
/**
* @typedef { Object } CharacterName
* @enum
* @property { String } english - The person's first and last name in English
* @property { String } native - The person's name in Japanese
* @property { String[] } alternative - Any nicknames or titles the person goes by.
* @property { String[] } alternativeSpoiler - Any nicknames or titles the person goes by but is marked as spoilers
* @property { String } userPreferred - The user's preferred name language. Defaults to romaji for non-authenticated
*/
/**
* @typedef { Object } StaffName
* @enum
* @property { String } english - The person's first and last name in English
* @property { String } native - The person's name in Japanese
* @property { String[] } alternative - Any nicknames or titles the person goes by.
* @property { String } userPreferred - The user's preferred name language. Defaults to romaji for non-authenticated
*/
/**
* @typedef { Object } SearchEntry
* @enum
* @property { Object } pageInfo - Information about the search result page
* @property { Number } pageInfo.total - The total amount of pages in the search
* @property { Number } pageInfo.currentPage - The current page of the search result
* @property { Number } pageInfo.lastPage - Last page of the searched term
* @property { Boolean } pageInfo.hasNextPage - Check if there is another page
* @property { Number } pageInfo.perPage - Result count per page.
* @property { Object[] } media - Search results
* @property { Number } media.id - The ID of the media
* @property { MediaTitle } media.title - The media's title (Used for anime and manga searches only)
* @property { PersonName } media.name - The media's name (Used for character and staff searches only)
* @property { String } media.name - The media's name (Used for studio and user searches only)
*/
/**
* @typedef { Object } ActivityEntry
* @property { Object } pageInfo - Information about the search result page
* @property { Number } pageInfo.total - The total amount of pages in the search
* @property { Number } pageInfo.currentPage - The current page of the search result
* @property { Number } pageInfo.lastPage - Last page of the searched term
* @property { Boolean } pageInfo.hasNextPage - Check if there is another page
* @property { Number } pageInfo.perPage - Result count per page.
* @property { Object[] } activities - Search results
* @property { Number } id - The ID of the activity
* @property { ActivityType } type - The activity type
* @property { Number } createdAt - The creation timestamp of the activity
* @property { Number } likeCount - The like count of the activity
*/
/**
* @typedef { Object } StaffEntry
* @enum
* @property { Number } id - The person's ID on AniList
* @property { StaffName } name - The person's name
* @property { Object } image - The person's cover image.
* @property { string } image.large - The large file
* @property { string } image.medium - The medium file
* @property { String } description - The person's description
* @property { string[] } primaryOccupations - The primary occupations that the person does
* @property { string } gender - The person's gender
* @property { Object | null } dateOfBirth - The person's date of birth
* @property { Number } dateOfBirth.year
* @property { Number } dateOfBirth.month
* @property { Number } dateOfBirth.day
* @property { Object | null } dateOfDeath - The person's date of death
* @property { Number } dateOfDeath.year
* @property { Number } dateOfDeath.month
* @property { Number } dateOfDeath.day
* @property { number } age - The person's age
* @property { number[] } yearsActive - Read as (start, end). If only one year is availible, person is still active.
* @property { string } homeTown - Where the person is from
* @property { string } bloodType - The person's blood type
* @property { Boolean } isFavourite - [Requires Login] Check if the person is favourited
* @property { Boolean } isFavouriteBlocked - True if user is not allowed to favourite the person
* @property { Number } favourites - The number of users that have favourited the person
* @property { String } language - The staff's language
* @property { MediaRelation[] } staffMedia - An array of ids and titles of all media that the staff has been apart of. (Up to the first 25 entries)
* @property { PersonRelation[] } characters - An array of ids and the english names of all characters that the staff has voiced. (Up to the first 25 entries)
* @property { MediaRelation[] } characterMedia - An array of ids and titles of all media that the person voiced characters in. (Up to the first 25 entries)
*/
/**
* @typedef { Object } CharacterEntry
* @enum
* @property { Number } id - The person's ID on AniList
* @property { CharacterName } name - The person's name
* @property { Object } image - The person's cover image.
* @property { string } image.large - The large file
* @property { string } image.medium - The medium file
* @property { string } gender - The character's gender. Could be male, female, non-binary, etc...
* @property { Object | null } dateOfBirth - The character's date of birth
* @property { Number } dateOfBirth.year
* @property { Number } dateOfBirth.month
* @property { Number } dateOfBirth.day
* @property { string } age - The character's age. Listed as a string as it may contain additional text or ranges.
* @property { string } bloodType - The character's blood type
* @property { String } description - The person's description
* @property { Boolean } isFavourite - [Requires Login] Check if the person is favourited
* @property { Boolean } isFavouriteBlocked - True if the user is unable to favourite the entry
* @property { Number } favourites - The number of users that have favourited the person
* @property { MediaRelation[] } media - All media that the character is in. (Up to the first 25 entries)
*/
/**
* @typedef { Object } MediaRelation
* @enum
* @property { Number } id - The media's AniList ID
* @property { MediaTitle } title - The media's titles
* @property { String } type - Tells what type of media it is. Returns either ANIME or MANGA
*/
/**
* @typedef { Object } PersonRelation
* @enum
* @property { Number } id - The person's AniList ID
* @property { String } name - The person's name in English
*/
/**
* @typedef { Object } StudioEntry
* @enum
* @property { Number } id - The studio's ID
* @property { String } name - The studio's name
* @property { Boolean } isAnimationStudio - Check if the studio is an animation studio
* @property { Number } favourites - Number of users who have favourited it.
* @property { Object[] } media - A list of all the media the studio has done (Up to the first 25 per AniList's limit).
* @property { Number } media.id - The media's ID
* @property { MediaTitle } media.title - The media's titles
* @property { String } siteUrl - The studio's site URL
* @property { Boolean } isFavourite - [Requires Login] Check if the studio is favourited by the user.
*/
/**
* @typedef { Object } AiringEntry
* @enum
* @property { Number } airingAt - The timestamp that the episode is airing at
* @property { Number } timeUntilAiring - The amount of seconds until the episode airs
* @property { Number } episode - The episode number to air.
*/
/**
* @typedef { Object } AnimeEntry
* @enum
* @property { AiringEntry[] } airingSchedule - The media's airing schedule, ordered by episode number (ie: 1, 2, 3, etc...).
* @property { Boolean } autoCreateForumThread - Checks if the media gets a thread automatically with each release
* @property { Number } averageScore - A weighted average score of the media.
* @property { String } bannerImage - The media's banner image
* @property { PersonRelation[] } characters - An array of characters
* @property { String } countryOfOrigin - The country origin of the media
* @property { Object[] } coverImage - The media's cover image
* @property { String } coverImage.large - The large sized cover image
* @property { String } coverImage.medium - The medium sized cover image
* @property { String } coverImage.small - The small sized cover image
* @property { String } coverImage.color - Average hex colour of the cover image
* @property { String } description - The medias description
* @property { Number } duration - General length of an episode
* @property { FuzzyDateObj } endDate - Official end date of the media
* @property { Number } episodes - Number of episodes
* @property { String[] } externalLinks - A list of external links associated with the media
* @property { Number } favourites - Number of users who have favourited it.
* @property { String } format - The format of the anime. (ie: TV, OVA, etc...)
* @property { String[] } genres - The media's genres
* @property { String } hashtag - Twitter hashtag associated with the anime
* @property { Number } id - The anime's AniList ID
* @property { Number } idMal - The anime's MyAnimeList ID
* @property { Boolean } isAdult - Check if the media is for adult audiences (ie: Hentai)
* @property { Boolean } isFavourite - [Requires Login] Check if the media is favourited
* @property { Boolean } isLicensed - Check if the media is licensed
* @property { Boolean } isLocked - Check if the media is locked for list additions or favouriting.
* @property { Boolean } isRecommendationBlocked - Check if the media is locked for recommendations.
* @property { Number } meanScore - Mean score of the media
* @property { Object } mediaListEntry - [Requires Login] User's media list entry; required for list edits.
* @property { Number } mediaListEntry.id - Id of the media on a user's media list
* @property { String } mediaListEntry.status - Status of the media on the user's media list.
* @property { String } modNotes - Mod notes for the media
* @property { AiringEntry[] | null } nextAiringEpisode - The media's next episode airing schedule. Returns either an AiringEntry object or null depending if there is an episode to air.
* @property { Number } popularity - Number of users with the media on their list
* @property { Object[] } rankings - Media rankings in a particular category compared to others.
* @property { Number } rankings.rank - The rank position
* @property { String } rankings.type - What type of ranking it is. (ie: RATED or POPULAR)
* @property { String } rankings.context - The category of the ranking.
* @property { Number } rankings.year - The year for the ranking
* @property { String } rankings.season - The season of the ranking. (ie: WINTER, SPRING, SUMMER, FALL)
* @property { MediaRelation[] } recommendations - Recommendations for the media.
* @property { MediaRelation[] } relations - All media that relate to the media.
* @property { Object[] } reviews - An array of reviews.
* @property { Number } reviews.id - The id of the review
* @property { Number } reviews.score - The review's media score
* @property { String } reviews.summary - The summary of the review.
* @property { String } reviews.body - The review content.
* @property { String } season - Season that the anime started airing
* @property { Number } seasonYear - The season year that the anime started airing
* @property { String } siteUrl - The media's AniList page
* @property { String } source - Source type that the media was adapted from
* @property { PersonRelation[] } staff - An array of credited staff
* @property { FuzzyDateObj } startDate - Official release date of the media
* @property { Object } stats - Statistics on the media
* @property { Object[] } stats.scoreDistribution - An array of how the users have rated the media. Each object contains a score and amount.
* @property { Object[] } stats.statusDistribution - An array of the users status with the show. Each object contains a status and amount.
* @property { String } status - The current status of the media
* @property { Object[] } streamingEpisodes - An ordered array of episodes and where it can be streamed.
* @property { String } streamingEpisodes.title - The title of the episode
* @property { String } streamingEpisodes.thumbnail - The thumbnail image for the episode
* @property { String } streamingEpisodes.url - The URL of the episode
* @property { String } streamingEpisodes.site - The name of the site where the episode is provided.
* @property { Object[] } studios - An array of studios that produced the anime.
* @property { Number } studios.id - The studio's id
* @property { String } studios.name - The studio's name
* @property { Boolean } studios.isAnimationStudio - Check if the studio is the animation studio for the anime.
* @property { String[] } synonyms - The media's alternative titles
* @property { Object[] } tags - Tags that describes the media
* @property {Number} tags.id - The ID of the tag
* @property { String } tags.name - The name of the tag
* @property { Boolean } tags.isMediaSpoiler - Checks if the tag is a spoiler for the media.
* @property { MediaTitle } title - The manga's titles
* @property { String | Object | null } trailer - Returns the trailer URL if the trailer is a Youtube or Dailymotion video. Will return an object if it is a video outside of YouTube and Dailymotion or null if no trailer is found.
* @property { Number } trending - Number of related activity in the past week.
* @property { Object[] } trends - An array of the media's daily trend status
* @property { Number } trends.date - The timestamp of the day the data was recorded
* @property { Number } trends.trending - Amount of media acitivity for that day
* @property { Number | null } trends.popularity - Number of users with the media on their list
* @property { Number | null } trends.inProgress - Number of users watching the media.
* @property { Number } updatedAt - Timestamp of when the page was last updated
*/
/**
* @typedef { Object } MangaEntry
* @enum
* @property { Boolean } autoCreateForumThread - Checks if the media gets a thread automatically with each release
* @property { Number } averageScore - A weighted average score of the media.
* @property { String } bannerImage - The media's banner image
* @property { Number } chapters - Number of chapters
* @property { PersonRelation[] } characters - An array of characters
* @property { String } countryOfOrigin - The country origin of the media
* @property { Object[] } coverImage - The media's cover image
* @property { String } coverImage.large - The large sized cover image
* @property { String } coverImage.medium - The medium sized cover image
* @property { String } coverImage.small - The small sized cover image
* @property { String } coverImage.color - Average hex colour of the cover image
* @property { String } description - The manga's description
* @property { FuzzyDateObj } endDate - Official end date of the media
* @property { String[] } externalLinks - A list of external links associated with the media
* @property { Number } favourites - Number of users who have favourited it.
* @property { String } format - The format of the manga. (ie: Manga, Novel, etc...)
* @property { String[] } genres - The media's genres
* @property { Number } id - The manga's AniList ID
* @property { Number } idMal - The manga's MyAnimeList ID
* @property { Boolean } isAdult - Check if the media is for adult audiences (ie: Hentai)
* @property { Boolean } isFavourite - [Requires Login] Check if the media is favourited
* @property { Boolean } isLicensed - Check if the media is licensed
* @property { Boolean } isLocked - Check if the media is locked for list additions or favouriting.
* @property { Boolean } isRecommendationBlocked - Check if the media is locked for recommendations.
* @property { Number } meanScore - Mean score of the media
* @property { Object } mediaListEntry - [Requires Login] User's media list entry; required for list edits.
* @property { Number } mediaListEntry.id - Id of the media on a user's media list
* @property { String } mediaListEntry.status - Status of the media on the user's media list.
* @property { String } modNotes - Mod notes for the media
* @property { Number } popularity - Number of users with the media on their list
* @property { Object[] } rankings - Media rankings in a particular category compared to others.
* @property { Number } rankings.rank - The rank position
* @property { String } rankings.type - What type of ranking it is. (ie: RATED or POPULAR)
* @property { String } rankings.context - The category of the ranking.
* @property { Number } rankings.year - The year for the ranking
* @property { String } rankings.season - The season of the ranking. (ie: WINTER, SPRING, SUMMER, FALL)
* @property { MediaRelation[] } recommendations - Recommendations for the media.
* @property { MediaRelation[] } relations - All media that relate to the media.
* @property { Object[] } reviews - An array of reviews.
* @property { Number } reviews.id - The id of the review
* @property { Number } reviews.score - The review's media score
* @property { String } reviews.summary - The summary of the review.
* @property { String } reviews.body - The review content.
* @property { String } siteUrl - The media's AniList page
* @property { PersonRelation[] } staff - An array of credited staff
* @property { FuzzyDateObj } startDate - Official release date of the media
* @property { Object } stats - Statistics on the media
* @property { Object[] } stats.scoreDistribution - An array of how the users have rated the media. Each object contains a score and amount.
* @property { Object[] } stats.statusDistribution - An array of the users status with the show. Each object contains a status and amount.
* @property { String } status - The current status of the media
* @property { String[] } synonyms - The media's alternative titles
* @property { Object[] } tags - Tags that describes the media
* @property {Number} tags.id - The ID of the tag
* @property { String } tags.name - The name of the tag
* @property { Boolean } tags.isMediaSpoiler - Checks if the tag is a spoiler for the media.
* @property { MediaTitle } title - The manga's titles
* @property { Number } trending - Number of related activity in the past week.
* @property { Object[] } trends - An array of the media's daily trend status.
* @property { Number } trends.date - The timestamp of the day the data was recorded
* @property { Number } trends.trending - Amount of media acitivity for that day
* @property { Number | null } trends.popularity - Number of users with the media on their list
* @property { Number | null } trends.inProgress - Number of users reading the media.
* @property { Number } updatedAt - Timestamp of when the page was last updated
* @property { Number } volumes - Number of volumes
*/
/**
* @typedef { Object } UserRelation
* @enum
* @property { Number } id - The user's ID
* @property { String } name - The user's name
*/
/**
* @typedef { Object } UserProfile
* @enum
* @property { Number } id - The user's ID
* @property { String } name - The user's username
* @property { String } about - The user's about section
* @property { Object } avatar - The user's avatar
* @property { String } avatar.large - A large version of the avatar
* @property { String } avatar.medium - A medium version of the avatar
* @property { String } bannerImage - The user's banner image
* @property { Boolean } isFollowing - [Requires Login] Check if the authorized user is following this user
* @property { Boolean } isBlocked - [Requires Login] Check if the authorized user has blocked this user
* @property { Boolean } isFollower - [Requires Login] Check if the user is following the authorized user
* @property { String } bans - Record of the user's bans
* @property { Object } options - The user's options
* @property { String } options.titleLanguage - The language that the user prefers to see (ie: English, Japanese)
* @property { Boolean } options.displayAdultContent - Check if the user allows adult content to be displayed
* @property { Boolean } options.airingNotifications - Check if the user receives notification about airing episodes
* @property { String } options.profileColor - The highlight colour that the user uses.
* @property { Number } options.activityMergeTime - Minutes between activity for them to be merged together. 0 is Never, Above 2 weeks (20160 mins) is Always.
* @property { StaffNameLanguage } options.staffNameLanguage - The language the user wants to see staff and character names in
* @property { NotificationOptions[] } options.notificationOptions - The user's notification options
* @property { Object } mediaListOptions - A user's media list settings
* @property { String } mediaListOptions.scoreFormat - The scoring format the user uses.
* @property { String } mediaListOptions.rowOrder - The default order list rows should be displayed in.
* @property { MediaListOptions } mediaListOptions.animeList - Settings pertaining to the user's anime list.
* @property { MediaListOptions } mediaListOptions.mangaList - Settings pertaining to the user's manga list.
* @property { Object } favourites - An object containing all of the user's favourited entries
* @property { MediaRelation[] } favourites.anime - An array of the user's favourite anime
* @property { MediaRelation[] } favourites.manga - An array of the user's favourite manga
* @property { PersonRelation[] } favourites.characters - An array of the user's favourite characters
* @property { PersonRelation[] } favourites.staff - An array of the user's favourite staff
* @property { Object[] } favourites.studios - An array of the user's favourite studios
* @property { Number } favourites.studios.id - The id of the studio
* @property { String } favourites.studios.name - The name of the studio
* @property { Number } unreadNotificationCount - Number of notifications that aren't read yet
* @property { String } siteUrl - The user's profile link
* @property { Number } donatorTier - The donator tier of the user
* @property { String } donatorBadge - Custom donation badge text
* @property { ModRole[] } moderatorRoles - Check if the user is a moderator.
* @property { Number } updatedAt - Timestamp of the last update for the profile.
*/
/**
* @typedef { Object } UserStats
* @enum
* @property { Object } anime - The user's statistics with anime
* @property { Number } anime.meanScore - The mean score of all entries
* @property { Number } anime.standardDeviation - The standard deviation of all scores with all entries
* @property { Number } anime.count - Total amount of entries
* @property { Number } anime.minutesWatched - Total amount of minutes the user has seen
* @property { Number } anime.episodesWatched - Total amount of episodes the user watched.
* @property { Object[] } anime.statuses - Undocumented
* @property { Number } anime.statuses.count - Number of entries
* @property { Number } anime.statuses.meanScore - The mean score of all entries
* @property { Number } anime.statuses.watchedTime - The total watched time
* @property { String } anime.statuses.status - The status of the entries
* @property { Object[] } anime.formats - Undocumented
* @property { Number } anime.formats.count - Number of entries
* @property { Number } anime.formats.meanScore - The mean score of all entries
* @property { Number } anime.formats.watchedTime - The total watched time
* @property { String } anime.formats.format - The format of the entries
* @property { Object[] } anime.lengths - Undocumented
* @property { Number } anime.lengths.count - Number of entries
* @property { Number } anime.lengths.meanScore - The mean score of all entries
* @property { Number } anime.lengths.watchedTime - The total watched time
* @property { String } anime.lengths.length - The length of the entries.
* @property { Object[] } anime.releaseYears - Undocumented
* @property { Number } anime.releaseYears.count - Number of entries
* @property { Number } anime.releaseYears.meanScore - The mean score of all entries
* @property { Number } anime.releaseYears.watchedTime - The total watched time
* @property { String } anime.releaseYears.releaseYear - The release year of the entries.
* @property { Object[] } anime.startYears - Undocumented
* @property { Number } anime.startYears.count - Number of entries
* @property { Number } anime.startYears.meanScore - The mean score of all entries
* @property { Number } anime.startYears.watchedTime - The total watched time
* @property { String } anime.startYears.startYear - The start year of the entries.
* @property { Object[] } anime.genres - Undocumented
* @property { Number } anime.genres.count - Number of entries
* @property { Number } anime.genres.meanScore - The mean score of all entries
* @property { Number } anime.genres.watchedTime - The total watched time
* @property { String } anime.genres.genre - The genre of the entries.
* @property { Object[] } anime.tags - Undocumented
* @property { Number } anime.tags.count - Number of entries
* @property { Number } anime.tags.meanScore - The mean score of all entries
* @property { Number } anime.tags.watchedTime - The total watched time
* @property { Object } anime.tags.tag - The tag of the entries.
* @property { Number } anime.tags.tag.id - The id of the tag
* @property { String } anime.tags.tag.name - The name of the tag.
* @property { Object[] } anime.countries - Undocumented
* @property { Number } anime.countries.count - Number of entries
* @property { Number } anime.countries.meanScore - The mean score of all entries
* @property { Number } anime.countries.watchedTime - The total watched time
* @property { String } anime.countries.country - The country of origin of the entries.
* @property { Object[] } anime.voiceActors - Undocumented
* @property { Number } anime.voiceActors.count - Number of entries
* @property { Number } anime.voiceActors.meanScore - The mean score of all entries
* @property { Number } anime.voiceActors.watchedTime - The total watched time
* @property { PersonRelation } anime.voiceActors.voiceActor - The VA of the entries.
* @property { Object[] } anime.staff - Undocumented
* @property { Number } anime.staff.count - Number of entries
* @property { Number } anime.staff.meanScore - The mean score of all entries
* @property { Number } anime.staff.watchedTime - The total watched time
* @property { PersonRelation } anime.staff.staff - The staff of the entries.
* @property { Object[] } anime.studios - Undocumented
* @property { Number } anime.studios.count - Number of entries
* @property { Number } anime.studios.meanScore - The mean score of all entries
* @property { Number } anime.studios.watchedTime - The total watched time
* @property { Object } anime.studios.studio - The studio of the entries.
* @property { Number } anime.studios.studio.id - The ID of the studio
* @property { String } anime.studios.studio.name - The name of the studio.
* @property { Object } manga - The user's statistics with manga
* @property { Number } manga.meanScore - The mean score of all entries
* @property { Number } manga.standardDeviation - The standard deviation of all scores with all entries
* @property { Number } manga.count - Total amount of entries
* @property { Number } manga.chaptersRead - Total amount of chapters read
* @property { Number } manga.volumesRead - Total amount of volumes read.
* @property { Object[] } manga.statuses - Undocumented
* @property { Number } manga.statuses.count - Number of entries
* @property { Number } manga.statuses.meanScore - The mean score of all entries
* @property { Number } manga.statuses.chaptersRead - The total chapters read
* @property { String } manga.statuses.status - The status of the entries
* @property { Object[] } manga.formats - Undocumented
* @property { Number } manga.formats.count - Number of entries
* @property { Number } manga.formats.meanScore - The mean score of all entries
* @property { Number } manga.formats.chaptersRead - The total chapters read
* @property { String } manga.formats.format - The format of the entries
* @property { Object[] } manga.lengths - Undocumented
* @property { Number } manga.lengths.count - Number of entries
* @property { Number } manga.lengths.meanScore - The mean score of all entries
* @property { Number } manga.lengths.chaptersRead - The total chapters read
* @property { String } manga.lengths.length - The length of the entries.
* @property { Object[] } manga.releaseYears - Undocumented
* @property { Number } manga.releaseYears.count - Number of entries
* @property { Number } manga.releaseYears.meanScore - The mean score of all entries
* @property { Number } manga.releaseYears.chaptersRead - The total chapters read
* @property { String } manga.releaseYears.releaseYear - The release year of the entries.
* @property { Object[] } manga.startYears - Undocumented
* @property { Number } manga.startYears.count - Number of entries
* @property { Number } manga.startYears.meanScore - The mean score of all entries
* @property { Number } manga.startYears.chaptersRead - The total chapters read
* @property { String } manga.startYears.startYear - The start year of the entries.
* @property { Object[] } manga.genres - Undocumented
* @property { Number } manga.genres.count - Number of entries
* @property { Number } manga.genres.meanScore - The mean score of all entries
* @property { Number } manga.genres.chaptersRead - The total chapters read
* @property { String } manga.genres.genre - The genre of the entries.
* @property { Object[] } manga.tags - Undocumented
* @property { Number } manga.tags.count - Number of entries
* @property { Number } manga.tags.meanScore - The mean score of all entries
* @property { Number } manga.tags.chaptersRead - The total chapters read
* @property { Object } manga.tags.tag - The tag of the entries.
* @property { Number } manga.tags.tag.id - The id of the tag
* @property { String } manga.tags.tag.name - The name of the tag.
* @property { Object[] } manga.countries - Undocumented
* @property { Number } manga.countries.count - Number of entries
* @property { Number } manga.countries.meanScore - The mean score of all entries
* @property { Number } manga.countries.chaptersRead - The total chapters read
* @property { String } manga.countries.country - The country of origin of the entries.
* @property { Object[] } manga.staff - Undocumented
* @property { Number } manga.staff.count - Number of entries
* @property { Number } manga.staff.meanScore - The mean score of all entries
* @property { Number } manga.staff.chaptersRead - The total chapters read
* @property { PersonRelation } manga.staff.staff - The staff of the entries.
*/
/**
* @typedef { Object } UserList
* @enum
* @property { String } name - The user's list name
* @property { Boolean } isCustomList - Checks if the list is a custom one (not created by default)
* @property { Boolean } isSplitCompletedList - Checks if the list is a split completed list. (ie: If the user chose to have each media format in a separate list)
* @property { EntryStatus } status - The user's list status. Returns either "CURRENT", "PLANNING", "COMPLETED", "PAUSED", "DROPPED", "REPEATING"
* @property { ListEntry[] } entries - A list of entries on this list
*/
/**
* @typedef { Object } ListEntry
* @enum
* @property { Object } media - An object containing various media information
* @property { Number } media.id - The id of the media
* @property { Number } media.idMAL - The MAL id of the media
* @property { MediaTitle } media.title - The media's titles
* @property { String } media.description - The media's description
* @property { String } media.format - The media's format (ie: TV, OVA, Novel)
* @property { Object[] } media.tags - Tags relating to the media
* @property { String } media.tags.name - The name of the tag
* @property { Boolean } media.tags.isMediaSpoiler - Checks if the tag is a spoiler or not.
* @property { FuzzyDateObj } media.startDate - Starting date
* @property { FuzzyDateObj } media.endDate - The official end date
* @property { String[] } media.genres - The genres of the media
* @property { Boolean } media.isFavourite - [Requires Login] Checks if the media is on the user's favourites list
* @property { Boolean } media.isAdult - Checks if the media is for adult audiences (ie: Hentai)
* @property { String[] } media.synonyms - The media's alternative titles
* @property { String } media.siteUrl - The media's AniList page
* @property { Number } media.duration - General length of an episode (Anime only)
* @property { Number } media.episodes - Number of episodes (Anime only)
* @property { Number } media.volumes - Number of volumes (Manga only)
* @property { Number } media.chapters - Number of chapters (Manga only)
* @property { Number } id - The AniList list ID for the entry
* @property { String } status - The user's status ("CURRENT", "PLANNING", "COMPLETED", "PAUSED", "DROPPED", "REPEATING") for that media
* @property { Number } score - The user's score for the entry
* @property { Number } progress - The user's progress for that entry. (Episode count for anime, chapter count for manga)
* @property { Number } progressVolumes - The user's volume progress for that media (Manga only)
* @property { Number } repeat - The amount of times the user rewatched or read the media
* @property { Number } priority - The user's priority status for that media
* @property { Boolean } private - [Requires Login] Check if the entry should only be visible to the authenticated user.
* @property { String } notes - The user's notes
* @property { Boolean } hiddenFromStatusLists - Checks if the entry should be hidden from non-custom lists
* @property { Object } advancedScores - The user's advanced scores for that media (Story, Characters, Visuals, Audio, Enjoyment, …)
* @property { Object } dates - Dates related to that entry in ISO 8601 format
* @property { String } dates.startedAt - The date the user started the entry
* @property { String } dates.completedAt - The date the user finished the entry
* @property { String } dates.updatedAt - The time the entry was last updated
* @property { String } dates.createdAt - When the entry data was created.
*/
/**
* @typedef { Object } ListActivity
* @enum
* @property { Number } id - The id of the activity
* @property { UserRelation } user - The user of the activity
* @property { String } status - The status of the update
* @property { String } type - The activity type
* @property { Number | null } progress - Progress of the media
* @property { MediaRelation } media - The target media
* @property { Number } createdAt - The timestamp of the creation time
* @property { Object[] } replies - The replies for the activity
* @property { Number } replies.id - The id of the reply
* @property { String } replies.text - The content of the reply
* @property { Number } replies.likeCount - The amount of likes on the reply
* @property { Boolean } isLocked - True if the activity cannot receive replies
* @property { Boolean } isSubscribed - [Requires Login] True if the authorized user is subscribed.
* @property { Boolean } isLiked - [Requires Login] True if authorized user liked it
* @property { UserRelation[] } likes - All users who liked the activity
*/
/**
* @typedef { Object } TextActivity
* @enum
* @property { Number } id - The id of the activity
* @property { UserRelation } user - The user of the activity
* @property { String } text - The content of the activity
* @property { String } type - The activity type
* @property { Number } createdAt - The timestamp of the creation time
* @property { Object } replies - The replies for the activity
* @property { Number } replies.id - The id of the reply
* @property { String } replies.text - The content of the reply
* @property { Number } replies.likeCount - The amount of likes on the reply
* @property { Boolean } isLocked - True if the activity cannot receive replies
* @property { Boolean } isSubscribed - [Requires Login] True if the authorized user is subscribed.
* @property { Boolean } isLiked - [Requires Login] True if authorized user liked it
* @property { UserRelation[] } likes - All users who liked the activity
*/
/**
* @typedef { Object } MessageActivity
* @enum
* @property { Number } id - The id of the activity
* @property { UserRelation } user - The sender of the activity
* @property { UserRelation } recipient - The user receiving the message
* @property { String } message - The content of the activity
* @property { String } type - The activity type
* @property { Number } createdAt - The timestamp of the creation time
* @property { Boolean } isPrivate - True if message is private and only viewable to sender and recipients
* @property { Object } replies - The replies for the activity
* @property { Number } replies.id - The id of the reply
* @property { String } replies.text - The content of the reply
* @property { Number } replies.likeCount - The amount of likes on the reply
* @property { Boolean } isLocked - True if the activity cannot receive replies
* @property { Boolean } isSubscribed - [Requires Login] True if the authorized user is subscribed.
* @property { Boolean } isLiked - [Requires Login] True if authorized user liked it
* @property { UserRelation[] } likes - All users who liked the activity
*/
/**
* @typedef {Number} FuzzyDateInt
* @example
* 6 Jan 2021 = 20210106
* April 2016 = 20160400
* 1969 = 19690000
* @description 8 digit integer (YYYYMMDD). Unknown dates are represented by 0.
*/
/**
* @typedef {Object} FuzzyDateObj
* @description An object that contains the year, month, and date of an item.
* @property { Number | null } year
* @property { Number | null } month
* @property { Number | null } day
*/
/**
* @typedef {Number} CountryCode
* @description ISO 3166-1 alpha-2 country code
*/
/**
* @typedef MediaFilterTypes
* @description An enum for filter types for values
* @enum
* @readonly
* @property {Number} id The AniList ID
* @property {Number} idMal The MAL ID
* @property {FuzzyDateInt} startDate The start date
* @property {FuzzyDateInt} endDate The end date
* @property {MediaSeason} season The season the show aired
* @property {Number} seasonYear The year of the season
* @property {MediaType} type The media type
* @property {MediaFormat} format The format of the media
* @property {MediaStatus} status Status of the media
* @property {Number} episodes Number of episodes
* @property {Number} duration Time for each episode
* @property {Number} chapters Number of chapters
* @property {Number} volumes Number of volumes
* @property {boolean} isAdult True if the media is adult
* @property {String} genre A genre
* @property {String} tag A tag
* @property {Number} minimumTagRank The minimum tag rank
* @property {String} tagCategory The category of the tag
* @property {boolean} onList [Requires Login] True if the media is on the user's list
* @property {String} licensedBy The licensor of the media
* @property {Number} averageScore The average score of the media
* @property {Number} popularity The popularity of the media
* @property {MediaFormat} source The source of the media
* @property {CountryCode} countryOfOrigin The country code for the country origin
* @property {String} search The search term to use
* @property {Number} id_not The id to exclude
* @property {Number[]} id_in The ids to include
* @property {Number[]} id_not_in The ids to exclude
* @property {Number} idMal_not The MAL id to exclude
* @property {Number[]} idMal_in The MAL ids to include
* @property {Number[]} idMal_not_in The MAL ids to exclude
* @property {FuzzyDateInt} startDate_greater Include any media with a start date equal to or past that date
* @property {FuzzyDateInt} startDate_lesser Include any media with a start date equal to or before that date
* @property {String} startDate_like Include any media with a start date similar to the provided value.
* @property {FuzzyDateInt} endDate_greater Include any media with an end date equal to or past that date
* @property {FuzzyDateInt} endDate_lesser Include any media with an end date equal to or before that date
* @property {String} endDate_like Include any media with an end date similar to the provided value
* @property {MediaFormat[]} format_in Include any media with these formats
* @property {MediaFormat} format_not Exclude any media with this format
* @property {MediaFormat[]} format_not_in Exclude any media with these formats
* @property {MediaStatus[]} status_in Include any media with these statuses
* @property {MediaStatus} status_not Exclude any media with this status
* @property {MediaStatus[]} status_not_in Exclude any media with these statuses
* @property {Number} episodes_greater Include any media with an episode count equal to or greater than the value
* @property {Number} episodes_lesser Include any media with an episode count less than or equal to the value
* @property {Number} duration_greater Include any media with a duration equal to or greater than the value
* @property {Number} duration_lesser Include any media with a duration less than or equal to the value
* @property {Number} chapters_greater Include any media with a chapter count equal to or greater than the value
* @property {Number} chapters_lesser Include any media with a chapter count less than or equal to the value
* @property {Number} volumes_greater Include any media with a volume count equal to or greater than the value
* @property {Number} volumes_lesser Include any media with a volume count less than or equal to the value
* @property {String[]} genre_in Include any media with the following genres
* @property {String[]} genre_not_in Exclude any media with the following genres
* @property {String[]} tag_in Include any media with the following tags
* @property {String[]} tag_not_in Exclude any media with the following tags
* @property {String[]} tagCategory_in Include any media with the following tag categories
* @property {String[]} tagCategory_not_in Exclude any media with the following tag categories
* @property {String[]} licensedBy_in Include any media licensed by the following licensors
* @property {Number} averageScore_not Exclude any media with an average score provided
* @property {Number} averageScore_greater Include any media with an average score equal to or greater than the value
* @property {Number} averageScore_lesser Include any media with an average score less than or equal to the value
* @property {Number} popularity_not Exclude any media with a popularity count provided
* @property {Number} popularity_greater Include any media with a popularity count equal to or greater than the value
* @property {Number} popularity_lesser Include any media with a popularity count less than or equal to the value
* @property {MediaSource[]} source_in Include any media with the following sources
* @property {MediaSort[]} sort Sort the query by the provided MediaSort key. (ie: FAVOURITES will sort the query by the favourites count)
*/
/**
* @typedef ActivityFilterTypes
* @description An enum for filter types for values
* @enum
* @readonly
* @property {Number} id The id of the activity
* @property {Number} userId The userID of the account with the activity
* @property {Number} messengerId The ID of who sent the message
* @property {ActivityType} type The type of activity
* @property {Boolean} isFollowing [Requires Login] Filter users by who is following the authorized user
* @property {Boolean} hasReplies Filter by which activities have replies.
* @property {Boolean} hasRepliesOrTypeText Filter by which activities have replies or text
* @property {Number} createdAt The time at which the activity was created
* @property {Number} id_not Exclude an activity with the given ID
* @property {Number[]} id_in Include any activities with the given IDs
* @property {Number[]} id_not_in Excludes any activities with the given IDs
* @property {Number} userId_not Exclude any activity with the given userID
* @property {Number[]} userId_in Includes any activity with the given userIDs
* @property {Number[]} userId_not_in Exclude any activity with the given userIDs
* @property {Number} messengerId_not Exclude any activity with the given ID
* @property {Number[]} messengerId_in Include any activity with the given IDs
* @property {Number[]} messengerId_not_in Exclude any activity with the given IDs
* @property {Number} mediaId_not Exclude any activity with the given media ID
* @property {Number[]} mediaId_in Include any activity with the given media IDs
* @property {Number[]} mediaId_not_in Exclude any activity with the given media IDs
* @property {ActivityType} type_not Exclude any activity with the same ActivityType
* @property {ActivityType[]} type_in Include any activity with the given ActivityTypes
* @property {ActivityType[]} type_not_in Exclude any activity with the given ActivityTypes
* @property {Number} createdAt_greater Include any activity created at the given date or more recent.
* @property {Number} createdAt_lesser Include any activity created at the given date or less recent.
* @property {ActivitySort[]} sort Sort the query by the parameters given.
*/
/**
* @typedef RecommendationList
* @description A list of recommendations for a given media
* @property {MediaRelation} media The given media
* @property {RecommendationEntry[]} recommendations The list of recommended medias.
*/
/**
* @typedef RecommendationEntry
* @description A recommendation for a given media
* @property {Number} id ID of the recommendation
* @property {Number} rating User ratings of the recommendation
* @property {RecommendationRating} userRating [Requires Login] Rating of the recommendation from the authorized user
* @property {UserRelation} user The first user to recommend
* @property {MediaRelation} mediaRecommendation The media being recommended.
*/
/**
* @typedef SingleRecommendation
* @description A recommendation for a given media
* @property {Number} id ID of the recommendation
* @property {Number} rating User ratings of the recommendation
* @property {RecommendationRating} userRating [Requires Login] Rating of the recommendation from the authorized user
* @property {UserRelation} user The first user to recommend
* @property {MediaRelation} mediaRecommendation The media being recommended.
* @property {MediaRelation} media The given media
*/
/**
* @typedef NotificationOption
* @description A user's notification options
* @property {NotificationType} type The type of notification
* @property {Boolean} enabled Enable the notification or disable it
*/
/**
* @typedef MediaListOptionsInput
* @description The options input for a user's media lists
* @property {String[]} sectionOrder The order each list should be displayed in
* @property {Boolean} splitCompletedSectionByFormat If the completed sections of the list should be separated by format
* @property {String[]} customLists The names of the user's custom lists
* @property {String[]} advancedScoring The names of the user's advanced scoring sections
* @property {Boolean} advancedScoringEnabled If advanced scoring is enabled
* @property {String} theme list theme
*/
/**
* @typedef UserOptionsInput
* @property {String} about - The user's description
* @property {UserTitleLanguage} titleLanguage - The user's preferred title language
* @property {Boolean} displayAdultContent - True if the user wants to display adult content
* @property {Boolean} airingNotifications - True if the user wants airing notifications
* @property {ScoreFormat} scoreFormat - The user's score format
* @property {String} rowOrder - The user's default list order
* @property {String} profileColor - The user's profile highlight color
* @property {String} donatorBadge - The user's donator badge highlight color
* @property {NotificationOption[]} notificationOptions - The user's notification options
* @property {String} timezone - The user's timezone offset format
* @property {Number} activityMergeTime - The minutes between activity for them to be merged together. 0 is Never, Above 2 weeks (20160 mins) is always.
* @property {MediaListOptionsInput} animeListOptions - The user's options for anime lists
* @property {MediaListOptionsInput} mangaListOptions - The user's options for manga lists
* @property {UserStaffNameLanguage} staffNameLanguage - The user's preferred way to see staff and characters
*/
/**
* @typedef UserOptions
* @property {String} about - The user's description
* @property {String} donatorBadge - The user's donator badge highlight color
* @property {Object} options - General settings
* @property {UserTitleLanguage} options.titleLanguage - The user's preferred title language
* @property {Boolean} options.displayAdultContent - True if the user wants to display adult content
* @property {Boolean} options.airingNotifications - True if the user wants airing notifications
* @property {String} options.profileColor - The user's profile highlight color
* @property {String} options.timezone - The user's timezone offset format
* @property {Number} options.activityMergeTime - The minutes between activity for them to be merged together. 0 is Never, Above 2 weeks (20160 mins) is always.
* @property {UserStaffNameLanguage} options.staffNameLanguage - The user's preferred way to see staff and characters
* @property {NotificationOption[]} options.notificationOptions
* @property {Object} mediaListOptions - List settings
* @property {ScoreFormat} mediaListOptions.scoreFormat - The user's score format
* @property {String} mediaListOptions.rowOrder - The user's default list order
* @property {MediaListOptions} mediaListOptions.animeListOptions - The user's options for anime lists
* @property {MediaListOptions} mediaListOptions.mangaListOptions - The user's options for manga lists
*/
/**
* @typedef MediaListOptions
* @property {String[]} sectionOrder - The order each list should be displayed in.
* @property {Boolean} splitCompletedSectionByFormat - Check if completed sections should be separate by format.
* @property {String[]} customLists - The names of the user's custom lists
* @property {String[]} advancedScoring - The names of the user's advanced scoring sections
* @property {Boolean} advancedScoringEnabled - Check if advanced scoring is enabled for the user's lists
*/
/**
* @typedef ThreadEntry
* @property {Number} id - The AniList ID of the thread
* @property {String} title - Title of the thread
* @property {String} body - Contents of the thread
* @property {UserRelation} user - Author of the thread
* @property {Number} replyCommentId - Comment ID of the latest reply
* @property {Number} viewCount - Number of how many people looked at the thread
* @property {Boolean} isLocked - True if locked. Users cannot comment on thread
* @property {Boolean} isSticky - True if sticky. Thread is pinned at the top of the forum
* @property {Boolean} isSubscribed - [Requires Login] True if authorized user is subscribed to thread
* @property {UserRelation} replyUser - Latest user to reply to the thread.
* @property {Boolean} isLiked - [Requires Login] True if the authorized user liked the thread.
* @property {Number} repliedAt - Timestamp of when the thread was last replied at
* @property {Number} createdAt - Timestamp of when the thread was created
* @property {Number} updatedAt - Timestamp of when the thread was last edited
* @property {UserRelation[]} likes - List of all users who liked the thread
* @property {Object[]} categories - List of all categories the thread is labeled with
* @property {Number} categories.id - ID of the forum category
* @property {String} categories.name - Name of the forum category
* @property {MediaRelation[]} mediaCategories - List of related media entries for the thread
*/
/**
* @typedef MediaTag
* @property {Number} id - The ID of the tag
* @property {String} name - Name of the tag
* @property {String} description - What the tag is about
* @property {String} category - The category that the tag belongs to
* @property {Boolean} isAdult - True if tag is meant for adult content
*/
/**
* @typedef ThreadComment
* @property {Number} id - The ID of the thread comment
* @property {UserRelation} user - The author of the comment
* @property {String} comment - The content of the comment
* @property {Boolean} isLiked - [Requires Login] True if current user liked
* @property {Number} createdAt - The timestamp it was created at
* @property {Number} updatedAt - The timestamp it was updated at
* @property {UserRelation[]} likes - An array of users who liked the post
* @property {ThreadComment[]} childComments - Comments in reply to this comment
* @property {Boolean} isLocked - True if users can no longer interact with comment.
*/
/**
* @typedef UpdateEntryOptions
* @property {Number} id - The ID of the list entry
* @property {Number} mediaId - The ID of the media to add
* @property {EntryStatus} status - The status on the list (ie: WATCHING)
* @property {Number} score - The score of the media in the user's chosen scoring method
* @property {Number} scoreRaw - The score in 100 point form
* @property {Number} progress - The amount of episodes/chapters
* @property {Number} progressVolumes - Amount of volumes read by the user
* @property {Number} repeat - Amount of repeats
* @property {Number} priority - Priority of planning
* @property {Boolean} private - True if the entry is visible only to the authorized user
* @property {String} notes - Text notes
* @property {Boolean} hiddenFromStatusLists - True if entry should be hidden on non-custom lists
* @property {String[]} customLists - Array of list names that the entry should be displayed on
* @property {Number[]} advancedScores - Array of advanced scores
* @property {Object} startedAt - Starting date
* @property {Number} startedAt.year
* @property {Number} startedAt.month
* @property {Number} startedAt.day
* @property {Object} completedAt - Completion date
* @property {Number} completedAt.year
* @property {Number} completedAt.month
* @property {Number} completedAt.day
*/
/**
* @typedef UpdatedEntry
* @property {Number} id - The ID of the list entry
* @property {Number} mediaId - The ID of the media to add
* @property {EntryStatus} status - The status on the list (ie: WATCHING)
* @property {Number} score - The score of the media in the user's chosen scoring method
* @property {Number} scoreRaw - The score in 100 point form
* @property {Number} progress - The amount of episodes/chapters
* @property {Number | null} progressVolumes - Amount of volumes read by the user
* @property {Number} repeat - Amount of repeats
* @property {Number} priority - Priority of planning
* @property {Boolean} private - True if the entry is visible only to the authorized user
* @property {String | null} notes - Text notes
* @property {Boolean} hiddenFromStatusLists - True if entry should be hidden on non-custom lists
* @property {String[] | null} customLists - Array of list names that the entry should be displayed on
* @property {Object} advancedScores
* @property {Number} advancedScores.Story
* @property {Number} advancedScores.Characters
* @property {Number} advancedScores.Visuals
* @property {Number} advancedScores.Audio
* @property {Number} advancedScores.Enjoyment
* @property {Object} startedAt - Starting date
* @property {Number} startedAt.year
* @property {Number} startedAt.month
* @property {Number} startedAt.day
* @property {Object} completedAt - Completion date
* @property {Number} completedAt.year
* @property {Number} completedAt.month
* @property {Number} completedAt.day
*/
/**
* @typedef AniListStats
* @property {Object[]} users - User count over the past seven days
* @property {Number} users.date - The date recorded as a timestamp
* @property {Number} users.count - Count on date
* @property {Number} users.change - Change from yesterday
* @property {Object[]} anime - Anime count over the past seven days
* @property {Number} anime.date - The date recorded as a timestamp
* @property {Number} anime.count - Count on date
* @property {Number} anime.change - Change from yesterday
* @property {Object[]} manga - Manga count over the past seven days
* @property {Number} manga.date - The date recorded as a timestamp
* @property {Number} manga.count - Count on date
* @property {Number} manga.change - Change from yesterday
* @property {Object[]} characters - Character entries over the past seven days
* @property {Number} characters.date - The date recorded as a timestamp
* @property {Number} characters.count - Count on date
* @property {Number} characters.change - Change from yesterday
* @property {Object[]} staff - Staff entries over the past seven days
* @property {Number} staff.date - The date recorded as a timestamp
* @property {Number} staff.count - Count on date
* @property {Number} staff.change - Change from yesterday
* @property {Object[]} studios - Studio count over the past seven days
* @property {Number} studios.date - The date recorded as a timestamp
* @property {Number} studios.count - Count on date
* @property {Number} studios.change - Change from yesterday
* @property {Object[]} reviews - Review count over the past seven days
* @property {Number} reviews.date - The date recorded as a timestamp
* @property {Number} reviews.count - Count on date
* @property {Number} reviews.change - Change from yesterday
*/