import { Fexios, FexiosConfigs, FexiosRequestOptions, FexiosFinalContext } from 'fexios';
/**
 * MediaWiki Api for Axios
 * Provides the API call methods similar to `mw.Api` at non-mw environments
 *
 * @author Dragon-Fish <dragon-fish@qq.com>
 * @license MIT
 */
export declare class MediaWikiApi {
    readonly baseURL?: string | undefined;
    readonly version: any;
    readonly request: Fexios;
    private tokens;
    readonly cookies: Map<string, string>;
    readonly defaultParams: MwApiParams;
    readonly defaultOptions: Partial<FexiosConfigs>;
    static INIT_DEFAULT_PARAMS: MwApiParams;
    constructor(baseURL?: string | undefined, defaultOptions?: Partial<FexiosConfigs>, defaultParams?: MwApiParams);
    setBaseURL(baseURL: string): this;
    static normalizeParamValue(item: MwApiParams[keyof MwApiParams]): string | File | undefined;
    static createRequestHandler(baseURL: string): Fexios;
    /** Base methods encapsulation */
    get<T = any>(query: MwApiParams, options?: FexiosRequestOptions): Promise<FexiosFinalContext<T>>;
    post<T = any>(data: MwApiParams | URLSearchParams | FormData, options?: FexiosRequestOptions): Promise<FexiosFinalContext<T>>;
    login(lgname: string, lgpassword: string, params?: MwApiParams, postOptions?: {
        retry?: number;
        noCache?: boolean;
    }): Promise<{
        result: 'Success' | 'NeedToken' | 'WrongToken' | 'Failed';
        token?: string;
        reason?: {
            code: string;
            text: string;
        };
        lguserid: number;
        lgusername: string;
    }>;
    getUserInfo(): Promise<{
        id: number;
        name: string;
        groups: string[];
        rights: string[];
        blockid?: number;
        blockedby?: string;
        blockedbyid?: number;
        blockreason?: string;
        blockexpiry?: string;
        blockedtimestamp?: string;
    }>;
    /** Token Handler */
    getTokens(type?: MwTokenName[]): Promise<Record<string, string>>;
    token(type?: MwTokenName, noCache?: boolean): Promise<string>;
    postWithToken<T = any>(tokenType: MwTokenName, body: MwApiParams, options?: {
        tokenName?: string;
        retry?: number;
        noCache?: boolean;
    }): Promise<FexiosFinalContext<T>>;
    postWithEditToken<T = any>(body: MwApiParams): Promise<FexiosFinalContext<T>>;
    static isBadTokenError(data?: any): any;
    getMessages(ammessages: string[], amlang: string | undefined, options: MwApiParams): Promise<Record<string, string>>;
    parseWikitext(wikitext: string, title?: string, extraBody?: MwApiParams, options?: FexiosRequestOptions): Promise<string>;
}
export declare class MediaWikiForeignApi extends MediaWikiApi {
    constructor(baseURL?: string, defaultOptions?: Partial<FexiosConfigs>, defaultParams?: MwApiParams);
}
export default MediaWikiApi;
export { MediaWikiApi as MwApi, MediaWikiForeignApi as ForeignApi };
export declare enum WikiSaikouErrorCode {
    HTTP_ERROR = "HTTP_ERROR",
    LOGIN_FAILED = "LOGIN_FAILED",
    LOGIN_RETRY_LIMIT_EXCEEDED = "LOGIN_RETRY_LIMIT_EXCEEDED",
    TOKEN_RETRY_LIMIT_EXCEEDED = "TOKEN_RETRY_LIMIT_EXCEEDED"
}
export declare class WikiSaikouError extends Error {
    readonly code: WikiSaikouErrorCode;
    readonly message: string;
    readonly cause?: FexiosFinalContext | undefined;
    readonly name = "WikiSaikouError";
    constructor(code: WikiSaikouErrorCode, message?: string, cause?: FexiosFinalContext | undefined);
}
export type MwApiParams = Record<string, string | number | string[] | undefined | boolean | File>;
export type MwTokenName = 'createaccount' | 'csrf' | 'login' | 'patrol' | 'rollback' | 'userrights' | 'watch';
