import { PrimitiveType } from "./components/UtilType";
import BlipsEndpoint from "./endpoints/Blips";
import CommentsEndpoint from "./endpoints/Comments";
import Favorites from "./endpoints/Favorites";
import ForumPostsEndpoint from "./endpoints/ForumPosts";
import ForumTopicsEndpoint from "./endpoints/ForumTopics";
import IQDBQueriesEndpoint from "./endpoints/IQDBQueries";
import NotesEndpoint from "./endpoints/Notes";
import PoolsEndpoint from "./endpoints/Pools";
import PostEventsEndpoint from "./endpoints/PostEvents";
import PostsEndpoint from "./endpoints/Posts";
import PostSets from "./endpoints/PostSets";
import PostVotes from "./endpoints/PostVotes";
import TagAliasesEndpoint from "./endpoints/TagAliases";
import TagImplicationsEndpoint from "./endpoints/TagImplications";
import TagsEndpoint from "./endpoints/Tags";
import UserFeedbacksEndpoint from "./endpoints/UserFeedbacks";
import UsersEndpoint from "./endpoints/Users";
import UtilityEndpoint from "./endpoints/Utility";
import WikiPagesEndpoint from "./endpoints/WikiPages";
export default class ZestyAPI {
    private static instance;
    private userAgent;
    private rateLimit;
    private domain;
    private authToken;
    private authLogin;
    Blips: BlipsEndpoint;
    Comments: CommentsEndpoint;
    Favorites: Favorites;
    ForumPosts: ForumPostsEndpoint;
    ForumTopics: ForumTopicsEndpoint;
    IQDBQueries: IQDBQueriesEndpoint;
    Notes: NotesEndpoint;
    Pools: PoolsEndpoint;
    Posts: PostsEndpoint;
    PostEvents: PostEventsEndpoint;
    PostSets: PostSets;
    PostVotes: PostVotes;
    Tags: TagsEndpoint;
    TagAliases: TagAliasesEndpoint;
    TagImplications: TagImplicationsEndpoint;
    Users: UsersEndpoint;
    UserFeedbacks: UserFeedbacksEndpoint;
    Utility: UtilityEndpoint;
    WikiPages: WikiPagesEndpoint;
    private constructor();
    /**
     * Get an instance of a E621 object, with access to various endpoints
     * @param {APIConfig} config Configuration object. Not necessary if `connect()` was called before.
     * @returns {ZestyAPI} E621 object
     */
    static connect(config?: APIConfig): ZestyAPI;
    login(auth: AuthToken | AuthLogin): void;
    logout(): void;
    getAuthToken(): AuthToken;
    getAuthLogin(): AuthLogin;
    get isAuthSet(): boolean;
    /**
     * Method used to make requests to E621's API.
     * It is strongly recommended not to use it directly, and to instead rely on endpoint methods.
     * @param {string} endpoint Endpoint address
     * @param {RequestConfig} config Request parameters
     * @returns {Promise<any>} Promise that is fulfilled when the request receives a response
     */
    makeRequest(endpoint: string, config?: RequestConfig): Promise<any>;
}
interface APIConfig {
    userAgent?: string;
    rateLimit?: 500 | number;
    domain?: "https://e621.net" | "https://e926.net" | string;
    authToken?: AuthToken;
    authLogin?: AuthLogin;
    debug?: boolean;
}
declare type AuthToken = string;
interface AuthLogin {
    username: string;
    apiKey: string;
}
interface RequestConfig {
    method?: "GET" | "POST" | "HEAD" | "PATCH" | "DELETE";
    query?: APIQuery;
    body?: APIQuery;
    rateLimit?: number;
}
export interface APIQuery {
    [prop: string]: PrimitiveType;
}
export {};
