aniki
Version:
Node.js APIs wrapper for anime/manga related content.
288 lines (278 loc) • 9.24 kB
TypeScript
import { AnikiHooks, FetchConfig } from "../../core/index";
import type {
IMALAnime,
IMALDetails,
IMALError,
IMALFind,
IMALManga,
IMALRanking,
IMALRankingRes,
IMALSeason,
IMALSeasonRes,
IMMLDetails,
IMMLRanking,
TMALFields,
TMALList,
} from "./interfaces";
/**
* @class
* @description A client class for interacting with the MyAnimeList API to retrieve anime information.
* @constructor
*
* @example
* // CJS
* const { MyAnimeList } = require("aniki");
* // ESM / TS
* import { MyAnimeList } from "aniki";
*
* // Using your client id.
* new MyAnimeList({ client_id: "ABcDEFghIJk123456789" });
*
* // Using an access token with your own authentification system.
* new MyAnimeList({ access_token: "abCDeFGhiJK123456" });
*
* // Do not use both at the same time.
* new MyAnimeList({ client_id: "ABcDEFghIJk123456789", access_token: "abCDeFGhiJK123456" }); // Error.
*
*
* // Finding anime
* anime.find({ q: "Oshi no ko", limit: 10 }).then(r => console.log(r));
*
* // Finding one anime and get the details.
* anime.details({ anime_id: 272 }).then(r => console.log(r));
*
* // Listing anime by a rank.
* anime.ranking({ ranking_type: "tv" }).then(r => console.log(r); // Will return the top TV anime series.
*
* // Listing anime by a year and the season.
* anime.seasonal({ year: 2020, season: "fall"}).then(r => console.log(r); // Will return anime that have been published at this year and season.
*
* @since 1.4.0
*/
declare class MyAnimeList {
private config: FetchConfig;
constructor(
{
client_id,
}: {
/**
* Your MyAnimeList API `client_id` (https://myanimelist.net/apiconfig)
*/
client_id: string;
},
/**
* Any supplementary configuration that you need to add for the fetch function.
*/
config?: FetchConfig,
);
constructor(
{
access_token,
}: {
/**
* An `access_token` belonging to an authenticated user.
*/
access_token: string;
},
/**
* Any supplementary configuration that you need to add for the fetch function.
*/
config?: FetchConfig,
);
/**
* @method
* @description Searches for anime using the provided parameters.
*
* @param params The search parameters for the request.
* @param hooks Object with functions inside to execute code before, after a request and on error.
* @template F A list of additional fields to include from the `IMALAnime` type.
* @returns A promise containing the search results, or `undefined` if an error occurs.
*
* @since 1.4.0
*/
find<F extends readonly TMALFields<IMALAnime>[] = readonly []>(
params: IMALFind & { fields?: F },
hooks?: AnikiHooks<IMALError>,
): Promise<Readonly<TMALList<IMALAnime, F, {}>> | undefined>;
/**
* @method
* @description Retrieves detailed information for a specific anime.
*
* @param params The fetch parameters for the request.
* @param hooks Object with functions inside to execute code before, after a request and on error.
* @template F A list of additional fields to include from the `IMALAnime` type.
* @returns A promise containing the anime details, or `undefined` if an error occurs.
*
* @since 1.4.0
*/
details<F extends readonly TMALFields<IMALAnime>[] = readonly []>(
params: IMALDetails & { fields?: F },
hooks?: AnikiHooks<IMALError>,
): Promise<
| Readonly<
Pick<IMALAnime, F[number]> & {
id: number;
title: string;
main_picture: {
medium: string;
large: string;
};
}
>
| undefined
>;
/**
* @method
* @description Retrieves a ranked list of anime based on the provided ranking type.
*
* @param params The ranking parameters for the request.
* @param hooks Object with functions inside to execute code before, after a request and on error.
* @template F A list of additional fields to include from the `IMALAnime` type.
* @returns A promise containing the ranking list response, or `undefined` if an error occurs.
*
* @since 1.4.3
*/
ranking<F extends readonly TMALFields<IMALAnime>[] = readonly []>(
params: IMALRanking & { fields?: F },
hooks?: AnikiHooks<IMALError>,
): Promise<Readonly<TMALList<IMALAnime, F, IMALRankingRes>> | undefined>;
/**
* @method
* @description Retrieves seasonal anime for a given year and season.
*
* @param params The parameters for the request.
* @param hooks Object with functions inside to execute code before, after a request and on error.
* @template F A list of additional fields to include from the `IMALAnime` type.
* @returns A promise containing the seasonal list response, or `undefined` if an error occurs.
*
* @since 1.4.3
*/
seasonal<F extends readonly TMALFields<IMALAnime>[] = readonly []>(
params: IMALSeason & { fields?: F },
hooks?: AnikiHooks<IMALError>,
): Promise<Readonly<TMALList<IMALAnime, F, IMALSeasonRes>> | undefined>;
}
/**
* @class
*
* @description A client class for interacting with the MyAnimeList API to retrieve manga information.
* @constructor
*
* @example
* // CJS
* const { MyMangaList } = require("aniki");
*
* // ESM / TS
* import { MyMangaList } from "aniki";
*
* // Using your client ID.
* new MyMangaList({ client_id: "ABcDEFghIJk123456789" });
*
* // Using an access token from your own authentication system
* new MyMangaList({ access_token: "abCDeFGhiJK123456" });
*
* // Do not use the two at the same time.
* new MyMangaList({ client_id: "ABcDEFghIJk123456789", access_token: "abCDeFGhiJK123456" }); // Error.
*
*
* // Searching for any manga
* manga.find({ q: "Oshi no ko", limit: 10 }).then(r => console.log(r));
*
* // Fetching a specific manga
* manga.details({ manga_id: 212 }).then(r => console.log(r));
*
* // Listing manga by ranking.
* manga.ranking({ ranking_type: "favorite" }).then(r => console.log(r);
*
* @since 1.4.3
*/
declare class MyMangaList {
private config: FetchConfig;
constructor(
{
client_id,
}: {
/**
* Your MyAnimeList API `client_id` (https://myanimelist.net/apiconfig)
*/
client_id: string;
},
/**
* Any supplementary configuration that you need to add for the fetch function.
*/
config?: FetchConfig,
);
constructor(
{
access_token,
}: {
/**
* An `access_token` belonging to an authenticated user.
*/
access_token: string;
},
/**
* Any supplementary configuration that you need to add for the fetch function.
*/
config?: FetchConfig,
);
/**
* @method
* @description Searches for manga using the provided parameters.
*
* @param params The search parameters for the request.
* @param hooks Object with functions inside to execute code before, after a request and on error.
* @template F A list of additional fields to include from the `IMALManga` type.
* @returns A promise containing the search results, or `undefined` if an error occurs.
*
* @since 1.4.3
*/
find<F extends readonly TMALFields<IMALManga>[] = readonly []>(
params: IMALFind & { fields?: F },
hooks?: AnikiHooks<IMALError>,
): Promise<Readonly<TMALList<IMALManga, F, {}>> | undefined>;
/**
* @method
* @description Retrieves almost all informations for a specific manga.
*
* @param params The fetch parameters for the request.
* @param hooks Object with functions inside to execute code before, after a request and on error.
* @template F A list of additional fields to include from the `IMALManga` type.
* @returns A promise containing the manga details, or `undefined` if an error occurs.
*
* @since 1.4.3
*/
details<F extends readonly TMALFields<IMALManga>[] = readonly []>(
params: IMMLDetails & { fields?: F },
hooks?: AnikiHooks<IMALError>,
): Promise<
| Readonly<
Pick<IMALManga, F[number]> & {
id: number;
title: string;
main_picture: {
medium: string;
large: string;
};
}
>
| undefined
>;
/**
* @method
* @description Retrieves a ranked list of manga based on the provided ranking type.
*
* @param params The ranking request parameters.
* @param hooks Object with functions inside to execute code before, after a request and on error.
* @template F A list of additional fields to include from the `IMALManga` type.
* @returns A promise containing the ranking list response, or `undefined` if an error occurs.
*
* @since 1.4.3
*/
ranking<F extends readonly TMALFields<IMALManga>[] = readonly []>(
params: IMMLRanking & { fields?: F },
hooks?: AnikiHooks<IMALError>,
): Promise<Readonly<TMALList<IMALManga, F, IMALRankingRes>> | undefined>;
}
export type * from "./interfaces";
export { MyAnimeList, MyMangaList };