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 PixivApiResponse<T> {
    data: T;
    status: number;
    headers: Record<string, string>;
    requestHeaders: Record<string, string>;
    requestBody: string | null;
    responseUrl: string | undefined;
}
export declare class PixivHttpClient {
    private readonly baseURL;
    private readonly defaultHeaders;
    constructor(baseURL: string, headers: Record<string, string>);
    get<U>(path: string, options?: {
        params?: Record<string, any>;
    }): Promise<PixivApiResponse<U>>;
    post<U>(path: string, body: string, options?: {
        headers?: Record<string, string>;
    }): Promise<PixivApiResponse<U>>;
}
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 http: PixivHttpClient;
    /**
     * コンストラクタ。外部からインスタンス化できないので、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>;
    /**
     * 画像取得用の `Response` を返す。
     *
     * 戻り値はストリームそのものではなく `Response` オブジェクトであり、
     * ストリームとして読み取る場合は `response.body` を参照する。
     * 必要に応じて `arrayBuffer()` などの `Response` の API も利用できる。
     *
     * @param url 画像 URL
     * @returns 画像取得結果の `Response`
     */
    static getImageStream(url: string): Promise<Response>;
    /**
     * イラストの詳細情報を取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    illustDetail(options: IllustDetailOptions): Promise<PixivApiResponse<GetV1IllustDetailResponse>>;
    /**
     * イラストの関連イラストを取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    illustRelated(options: IllustRelatedOptions): Promise<PixivApiResponse<GetV2IllustRelatedResponse>>;
    /**
     * イラストを検索する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    searchIllust(options: SearchIllustOptions): Promise<PixivApiResponse<GetV1SearchIllustResponse>>;
    /**
     * イラストランキングを取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    illustRanking(options?: IllustRankingOptions): Promise<PixivApiResponse<GetV1IllustRankingResponse>>;
    /**
     * おすすめイラストを取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    illustRecommended(options?: RecommendedIllustOptions): Promise<PixivApiResponse<GetV1IllustRecommendedResponse>>;
    /**
     * イラストシリーズの詳細情報を取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    illustSeries(options: IllustSeriesOptions): Promise<PixivApiResponse<GetV1IllustSeriesResponse>>;
    /**
     * イラストをブックマークする。
     *
     * @param options オプション
     * @returns レスポンス
     */
    illustBookmarkAdd(options: IllustBookmarkAddOptions): Promise<PixivApiResponse<PostV2IllustBookmarkAddResponse>>;
    /**
     * イラストのブックマークを削除する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    illustBookmarkDelete(options: IllustBookmarkDeleteOptions): Promise<PixivApiResponse<PostV1IllustBookmarkDeleteResponse>>;
    mangaRecommended(options?: MangaRecommendedOptions): Promise<PixivApiResponse<GetV1MangaRecommendedResponse>>;
    /**
     * うごイラの詳細情報を取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    ugoiraMetadata(options: UgoiraDetailOptions): Promise<PixivApiResponse<GetV1IllustUgoiraMetadataResponse>>;
    /**
     * 小説の詳細情報を取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    novelDetail(options: NovelDetailOptions): Promise<PixivApiResponse<GetV2NovelDetailResponse>>;
    /**
     * 小説の本文を取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    novelText(options: NovelTextOptions): Promise<PixivApiResponse<string>>;
    /**
     * 小説の関連小説を取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    novelRelated(options: NovelRelatedOptions): Promise<PixivApiResponse<GetV1NovelRelatedResponse>>;
    /**
     * 小説を検索する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    searchNovel(options: SearchNovelOptions): Promise<PixivApiResponse<GetV1SearchNovelResponse>>;
    /**
     * 小説ランキングを取得する。
     */
    novelRanking(options?: NovelRankingOptions): Promise<PixivApiResponse<GetV1NovelRankingResponse>>;
    /**
     * おすすめ小説を取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    novelRecommended(options?: RecommendedNovelOptions): Promise<PixivApiResponse<GetV1NovelRecommendedResponse>>;
    /**
     * 小説シリーズの詳細情報を取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    novelSeries(options: NovelSeriesOptions): Promise<PixivApiResponse<GetV2NovelSeriesResponse>>;
    /**
     * 小説をブックマークする。
     *
     * @param options オプション
     * @returns レスポンス
     */
    novelBookmarkAdd(options: NovelBookmarkAddOptions): Promise<PixivApiResponse<PostV2NovelBookmarkAddResponse>>;
    /**
     * 小説のブックマークを削除する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    novelBookmarkDelete(options: NovelBookmarkDeleteOptions): Promise<PixivApiResponse<PostV1NovelBookmarkDeleteResponse>>;
    /**
     * ユーザの詳細情報を取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    userDetail(options: UserDetailOptions): Promise<PixivApiResponse<GetV1UserDetailResponse>>;
    /**
     * ユーザのイラストブックマークを取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    userBookmarksIllust(options: UserBookmarksIllustOptions): Promise<PixivApiResponse<GetV1UserBookmarksIllustResponse>>;
    /**
     * ユーザの小説ブックマークを取得する。
     *
     * @param options オプション
     * @returns レスポンス
     */
    userBookmarksNovel(options: UserBookmarksNovelOptions): Promise<PixivApiResponse<GetV1UserBookmarksNovelResponse>>;
    /**
     * 接続を閉じる。
     */
    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