migu/common/modules/al.d.ts
2024-08-30 20:31:09 -07:00

175 lines
2.6 KiB
TypeScript

export type Media = {
id: number
idMal: number
title: {
romaji?: string
english?: string
native?: string
userPreferred: string
}
description?: string
season?: string
seasonYear?: string
format: string
status: string
episodes?: number
duration?: number
averageScore?: number
genres?: string[]
tags?: {
name: string
rank: integer
}[]
isFavourite: boolean
coverImage?: {
extraLarge: string
color: string
medium: string
}
source?: string
countryOfOrigin?: string
isAdult?: boolean
bannerImage?: string
synonyms?: string[]
stats: {
scoreDistribution: {
score: number
amount: number
}[]
}
nextAiringEpisode?: {
episode: number
airingAt: number
}
trailer?: {
id: string
site: string
}
streamingEpisodes?: {
title: string
thumbnail: string
}[]
mediaListEntry?: {
id: number
progress: number
repeat: number
status?: string
customLists?: string[]
score?: number
startedAt?: {
year: number
month: number
day: number
}
completedAt?: {
year: number
month: number
day: number
}
}
studios?: {
nodes: {
name: string
}[]
}
airingSchedule?: {
nodes?: {
episode: number
airingAt: number
}[]
}
relations?: {
edges: {
relationType: string
node: {
id: number
type: string
format?: string
seasonYear?: number
}
}[]
}
recommendations?: {
edges?: {
node: {
rating: number
mediaRecommendation: {
id: number
}
}
}[]
}
}
export type Following = {
status: string
score: number
user: {
name: string
avatar: {
medium: string
}
}
}
export type MediaListMedia = {
id: number
status: string
mediaListEntry: {
progress: number
}
nextAiringEpisode?: {
episode: number
}
relations?: {
edges: {
relationType: string
node: {
id: number
type: string
format?: string
}
}[]
}
}
export type MediaListCollection = {
lists: {
status: string
entries: {
media: Media
}[]
}[]
}
export type Viewer = {
avatar: {
medium: string
large: string
}
name: string
id: number
mediaListOptions?: {
animeList?: {
customLists?: string[]
}
}
}
export type Query<T> = {
data: T
}
export type PagedQuery<T> = Query<{
Page: {
pageInfo: {
total: number
perPage: number
currentPage: number
lastPage: number
hasNextPage: boolean
}
} & T
}>
// TODO: error responses and nullish values