import { AxiosInstance, AxiosResponse } from 'axios';
import { ReadStream } from 'node:fs';
import qs from 'qs';
import { IllustDetailOptions, SearchIllustOptions, RecommendedIllustOptions, IllustBookmarkAddOptions, NovelDetailOptions, SearchNovelOptions, RecommendedNovelOptions, NovelSeriesOptions, UserDetailOptions, IllustSeriesOptions, NovelTextOptions, MangaRecommendedOptions, IllustBookmarkDeleteOptions, NovelBookmarkAddOptions, NovelBookmarkDeleteOptions, UserBookmarksIllustOptions, UserBookmarksNovelOptions, UgoiraDetailOptions, IllustRelatedOptions, NovelRelatedOptions, IllustRankingOptions, NovelRankingOptions } from './options';
import { PixivApiError } from './types/error-response';
import { GetV1IllustDetailResponse } from './types/endpoints/v1/illust/detail';
import { GetV1SearchIllustResponse } from './types/endpoints/v1/search/illust';
import { GetV1IllustRecommendedResponse } from './types/endpoints/v1/illust/recommended';
import { PostV2IllustBookmarkAddResponse } from './types/endpoints/v2/illust/bookmark/add';
import { GetV1IllustSeriesResponse } from './types/endpoints/v1/illust/series';
import { GetV2NovelDetailResponse } from './types/endpoints/v2/novel/detail';
import { GetV1SearchNovelResponse } from './types/endpoints/v1/search/novel';
import { GetV1NovelRecommendedResponse } from './types/endpoints/v1/novel/recommended';
import { GetV2NovelSeriesResponse } from './types/endpoints/v2/novel/series';
import { GetV1UserDetailResponse } from './types/endpoints/v1/user/detail';
import { GetV1MangaRecommendedResponse } from './types/endpoints/v1/manga/recommended';
import { PostV1IllustBookmarkDeleteResponse } from './types/endpoints/v1/illust/bookmark/delete';
import { PostV2NovelBookmarkAddResponse } from './types/endpoints/v2/novel/bookmark/add';
import { PostV1NovelBookmarkDeleteResponse } from './types/endpoints/v1/novel/bookmark/delete';
import { GetV1UserBookmarksNovelResponse } from './types/endpoints/v1/user/bookmarks/novel';
import { GetV1UserBookmarksIllustResponse } from './types/endpoints/v1/user/bookmarks/illust';
import { GetV1IllustUgoiraMetadataResponse } from './types/endpoints/v1/illust/ugoira/metadata';
import { ResponseDatabase, ResponseDatabaseOptions } from './saving-responses';
import { GetV2IllustRelatedResponse } from './types/endpoints/v2/illust/related';
import { GetV1NovelRelatedResponse } from './types/endpoints/v1/novel/related';
import { GetV1IllustRankingResponse } from './types/endpoints/v1/illust/ranking';
import { GetV1NovelRankingResponse } from './types/endpoints/v1/novel/ranking';
export interface PixivDebugOutputResponseOptions {
    enable: boolean;
    db?: ResponseDatabaseOptions;
}
export interface PixivDebugOptions {
    outputResponse?: PixivDebugOutputResponseOptions;
}
export interface PixivTsOptions {
    debugOptions?: PixivDebugOptions;
}
/**
 * pixiv API
 */
export default class Pixiv {
    private static clientId;
    private static clientSecret;
    private static hashSecret;
    private hosts;
    readonly userId: string;
    readonly accessToken: string;
    readonly refreshToken: string;
    readonly responseDatabase: ResponseDatabase | null;
    readonly axios: AxiosInstance;
    /**
     * コンストラクタ。外部からインスタンス化できないので、of メソッドを使うこと。
     *
     * @param userId ユーザー ID
     * @param accessToken アクセストークン
     * @param refreshToken リフレッシュトークン
     * @param pixivTsOptions Pixivts オプション
     */
    private constructor();
    /**
     * リフレッシュトークンからインスタンスを生成する。
     *
     * @param refreshToken リフレッシュトークン
     * @returns Pixiv インスタンス
     */
    static of(refreshToken: string, pixivTsOptions?: PixivTsOptions): Promise<Pixiv>;
    /**
     * 画像のaxiosストリームを取得する。
     */
    static getAxiosImageStream(url: string): Promise<AxiosResponse<ReadStream, any>>;
    /**
     * イラストの詳細情報を取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    illustDetail(options: IllustDetailOptions): Promise<AxiosResponse<GetV1IllustDetailResponse, any>>;
    /**
     * イラストの関連イラストを取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    illustRelated(options: IllustRelatedOptions): Promise<AxiosResponse<GetV2IllustRelatedResponse, any>>;
    /**
     * イラストを検索する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    searchIllust(options: SearchIllustOptions): Promise<AxiosResponse<GetV1SearchIllustResponse, any>>;
    /**
     * イラストランキングを取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    illustRanking(options?: IllustRankingOptions): Promise<AxiosResponse<GetV1IllustRankingResponse, any>>;
    /**
     * おすすめイラストを取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    illustRecommended(options?: RecommendedIllustOptions): Promise<AxiosResponse<GetV1IllustRecommendedResponse, any>>;
    /**
     * イラストシリーズの詳細情報を取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    illustSeries(options: IllustSeriesOptions): Promise<AxiosResponse<GetV1IllustSeriesResponse, any>>;
    /**
     * イラストをブックマークする。
     *
     * @param options オプション
     * @returns レスポンス
     */
    illustBookmarkAdd(options: IllustBookmarkAddOptions): Promise<AxiosResponse<PostV2IllustBookmarkAddResponse, any>>;
    /**
     * イラストのブックマークを削除する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    illustBookmarkDelete(options: IllustBookmarkDeleteOptions): Promise<AxiosResponse<PostV1IllustBookmarkDeleteResponse, any>>;
    mangaRecommended(options?: MangaRecommendedOptions): Promise<AxiosResponse<GetV1MangaRecommendedResponse, any>>;
    /**
     * うごイラの詳細情報を取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    ugoiraMetadata(options: UgoiraDetailOptions): Promise<AxiosResponse<GetV1IllustUgoiraMetadataResponse, any>>;
    /**
     * 小説の詳細情報を取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    novelDetail(options: NovelDetailOptions): Promise<AxiosResponse<GetV2NovelDetailResponse, any>>;
    /**
     * 小説の本文を取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    novelText(options: NovelTextOptions): Promise<AxiosResponse<string, any>>;
    /**
     * 小説の関連小説を取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    novelRelated(options: NovelRelatedOptions): Promise<AxiosResponse<GetV1NovelRelatedResponse, any>>;
    /**
     * 小説を検索する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    searchNovel(options: SearchNovelOptions): Promise<AxiosResponse<GetV1SearchNovelResponse, any>>;
    /**
     * 小説ランキングを取得する。
     */
    novelRanking(options?: NovelRankingOptions): Promise<AxiosResponse<GetV1NovelRankingResponse, any>>;
    /**
     * おすすめ小説を取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    novelRecommended(options?: RecommendedNovelOptions): Promise<AxiosResponse<GetV1NovelRecommendedResponse, any>>;
    /**
     * 小説シリーズの詳細情報を取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    novelSeries(options: NovelSeriesOptions): Promise<AxiosResponse<GetV2NovelSeriesResponse, any>>;
    /**
     * 小説をブックマークする。
     *
     * @param options オプション
     * @returns レスポンス
     */
    novelBookmarkAdd(options: NovelBookmarkAddOptions): Promise<AxiosResponse<PostV2NovelBookmarkAddResponse, any>>;
    /**
     * 小説のブックマークを削除する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    novelBookmarkDelete(options: NovelBookmarkDeleteOptions): Promise<AxiosResponse<PostV1NovelBookmarkDeleteResponse, any>>;
    /**
     * ユーザの詳細情報を取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    userDetail(options: UserDetailOptions): Promise<AxiosResponse<GetV1UserDetailResponse, any>>;
    /**
     * ユーザのイラストブックマークを取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    userBookmarksIllust(options: UserBookmarksIllustOptions): Promise<AxiosResponse<GetV1UserBookmarksIllustResponse, any>>;
    /**
     * ユーザの小説ブックマークを取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    userBookmarksNovel(options: UserBookmarksNovelOptions): Promise<AxiosResponse<GetV1UserBookmarksNovelResponse, any>>;
    /**
     * 接続を閉じる。
     */
    close(): Promise<void>;
    /**
     * クエリストリングをパースする。
     *
     * @param url URL
     * @returns パースしたクエリストリングオブジェクト
     */
    static parseQueryString(url: string): qs.ParsedQs;
    /**
     * レスポンスがエラーかどうかを判定する。
     *
     * @param response Axios レスポンス
     * @returns エラーかどうか
     */
    static isError(response: any): response is PixivApiError;
    /**
     * MD5ハッシュを生成する。
     *
     * @param str 文字列
     * @returns ハッシュ
     */
    private static hash;
    /**
     * リクエストを送信する。
     *
     * ジェネリクスの順番は、T: リクエスト、U: レスポンス。
     *
     * @param options オプション
     * @returns レスポンス
     */
    private request;
    private saveResponse;
    private isJSON;
    /**
     * 必須のオプションが含まれているかどうかをチェックする。
     *
     * @param options オプション
     * @param required 必須のオプションキー
     * @throws 必須のオプションが含まれていない場合
     */
    private checkRequiredOptions;
    /**
     * キャメルケースのオブジェクトキーをスネークケースなオブジェクトキーに変換する。
     *
     * @param object オブジェクト
     * @returns 変換後のオブジェクト
     */
    private convertCamelToSnake;
}
//# sourceMappingURL=pixiv.d.ts.map