import { AxiosInstance, AxiosRequestConfig } from 'axios';
import { Strategies, StrategiesType } from './validator/types';
import { RequestCustomMethods } from './index';
export declare type EmptyObject = {
    [key in any]: never;
};
/**
 * 通用提取
 */
interface CommonConfig {
    /**
     * 接口验证授权逻辑，一般来用来处理自动跳转至登录页
     *
     * Default: true
     */
    customAuth?: boolean;
    /**
     * 全局提示，接口请求成功，但 code 码错误
     *
     * Default: true
     */
    codeErrTip?: boolean;
    /**
     * 全局提示，接口请求错误
     *
     * Default: true
     */
    rejectErrTip?: boolean;
    /**
     * 全局显示 loading
     *
     * Default: false,Mobile-Default: true
     */
    loading?: boolean;
    /**
     * 标记是否在请求的时候加入取消接口队列
     *
     * Default: false
     */
    cancel?: boolean;
}
/**
 * 基本请求方法
 */
interface Method extends RequestCustomMethods {
    get: any;
    post: any;
    put: any;
    delete: any;
}
export declare type RequestMethod = keyof Method;
interface Branch extends CommonConfig {
    /**
     * 是否在开发环境进行代理，需要配置 webpack devServer
     *
     * Default: true
     */
    proxy?: boolean;
    /**
     * 中台 node 接口包专属
     */
    msConfig?: any;
    /**
     * 域名源
     */
    origin: {
        test: string;
        pre?: string;
        prod: string;
        [key: string]: string | undefined;
    };
    /**
     * 验证器
     */
    validator?: Array<Strategies>;
    /**
     * 请求方法扩展
     */
    requestExtend?: Record<string, (path: string, data?: any, config?: AxiosRequestConfigExtend) => AxiosRequestConfigExtend>;
}
/**
 * 基础配置
 */
export interface RequestConfig {
    /**
     * node 环境变量 development/production
     *
     * Default: development
     */
    nodeEnv: string;
    /**
     * 自定义环境变量，test/pre/prod
     *
     * Default: test
     */
    customEnv: string;
    /**
     * 是否移动端，会对打印做出区别...
     *
     * Default: false
     */
    mobile?: boolean;
    /**
     * 是否打印接口请求信息
     *
     * Default: true
     */
    printLog?: boolean;
    /**
     * 自定义错误的 code 码配置。如果与当前业务重复，请配置
     */
    customCode?: {
        /**
         * 自定义错误，默认 4400
         */
        custom: number;
        /**
         * 接口取消，默认 4401
         */
        canceled: number;
    };
    /**
     * 显示弹框，一般用来处理一些系统级的报错
     */
    showModal(message: string): void;
    /**
     * 显示轻提示，一般用来处理一些业务code的报错
     */
    showToast(message: string): void;
    /**
     * 配置请求前后的 loading 开关
     */
    showLoading: {
        show(): void;
        hide(): void;
    };
    /**
     * 验证器策略池
     */
    strategies: {
        [key in keyof StrategiesType]?: (p: {
            branch: string;
            data: any;
            config: AxiosRequestConfigExtend;
            codeKey: string;
            codeValue: number | number[];
            msgKey: string;
            showModal(message: string): void;
            showToast(message: string): void;
        }) => void;
    };
    /**
     * 请求分支实例配置
     */
    branches: {
        master: Branch;
        [key: string]: Branch;
    };
    /**
     * 应用 i18n 全局方法 $t 注入
     */
    $t?(...args: any[]): string;
}
/**
 * 重写 axios 实例方法
 */
declare type OverrideAxiosInstance = Omit<AxiosInstance, RequestMethod> & {
    [key in RequestMethod]: RequestFn;
};
export declare type RequestFn = (path: string, data?: any, config?: AxiosRequestConfigExtend) => Promise<any>;
/**
 * 为了支持 request.foo.get() 写法
 */
export declare type AxiosInstanceExtend = OverrideAxiosInstance & {
    install: any;
    [key: string]: OverrideAxiosInstance;
};
export interface AxiosRequestConfigExtend extends CommonConfig, AxiosRequestConfig {
    /**
     * mock
     * @deprecated 暂不支持
     */
    mock?: boolean;
    [key: string]: any;
}
export {};
