import { BaseConfiguration, ExtraConfiguration, LifeCycle, SuccessParam } from 'miniprogram-network-life-cycle';
import { GeneralCallbackResult, ParamsType } from 'miniprogram-network-utils';
/**
 * 默认配置信息
 */
export declare type DownloadInit<T extends {} = {}, TReturn = any> = BaseConfiguration<FullDownloadOption<T, TReturn>, T & wx.DownloadFileOption, TReturn>;
interface BaseDownloadOption {
    /**
     * 下载地址
     * 如果URL以`http://`或者`https://`开头将忽略 baseURL
     */
    url: NonNullable<string>;
    /**
     * 本地路径可缓存
     */
    filePath?: string;
}
/**
 * 全部配置信息
 */
export interface FullDownloadOption<T extends {} = {}, TReturn = any> extends DownloadInit<T, TReturn>, ExtraConfiguration, BaseDownloadOption {
    /**
     * 下载进度回调函数
     */
    onProgressUpdate?: wx.DownloadTaskOnProgressUpdateCallback;
}
/**
 * 下载的额外配置
 * @template TParams 路径参数(如`/items/{id}`或者`/{0}/{1}`)的格式类型,默认 任意object或数组
 * @template TExt 额外的扩展属性
 */
declare type DownloadConfig<TParams = ParamsType, TExt extends {} = {}, TReturn = any> = Partial<TExt> & Partial<DownloadInit<TExt, TReturn> & ExtraConfiguration> & {
    /**
     * 路径参数
     * URL Path Params
     * the path parameters to be replace in path
     * Must be a plain `object` or `array`
     * @example
     *  url = "/{ID}/status"
     *  param = {ID: 12345}
     *  request url will be /1234/status
     */
    params?: TParams;
    /**
     * 下载进度回调函数
     */
    onProgressUpdate?: wx.DownloadTaskOnProgressUpdateCallback;
};
/**
 * 下载的全部配置项
 * @template TData patch data参数格式类型,默认 any
 * @template TParams 路径参数(如`/items/{id}`或者`/{0}/{1}`)的格式类型,默认 任意object或数组
 */
export declare type DownloadOption<TParams = ParamsType, TExt extends {} = {}, TReturn = any> = DownloadConfig<TParams, TExt, TReturn> & BaseDownloadOption;
/**
 * 下载封装
 * @template T 扩展参数类型
 */
export declare class Downloader<T extends {} = {}> extends LifeCycle<T & wx.DownloadFileOption, wx.DownloadTask, DownloadInit<T>, FullDownloadOption<T>> {
    /**
     * 新建 Http实列
     * @param config 全局默认配置
     * @param downloader 下载处理方法，默认使用下载队列处理
     * @param listeners 下载事件监听回调
     */
    constructor(config?: DownloadInit<T>, downloader?: (o: T & wx.DownloadFileOption) => wx.DownloadTask, listeners?: Downloader<T>['Listeners']);
    /**
     * 使用自定义参数下载
     * @param options - 完整下载参数
     * @template TReturn Promise 返回的格式类型,默认返回微信原始返回数据格式
     * @template TParams 路径参数(如`/items/{id}`或者`/{0}/{1}`)的格式类型,默认 任意object或数组
     */
    download<TReturn = SuccessParam<wx.DownloadFileOption>, TParams = ParamsType>(options: DownloadOption<TParams, T, TReturn>): Promise<TReturn>;
    /**
     * 快速下载
     * @param url 下载地址
     * @param filePath 本地文件路径
     * @param config 其他参数
     * @template TReturn Promise 返回的格式类型,默认返回微信原始返回数据格式
     * @template TParams 路径参数(如`/items/{id}`或者`/{0}/{1}`)的格式类型,默认 任意object或数组
     */
    download<TReturn = SuccessParam<wx.DownloadFileOption>, TParams = ParamsType>(url: string, filePath?: string, config?: DownloadConfig<TParams, T, TReturn>): Promise<TReturn>;
}
export declare namespace wx {
    function downloadFile(options: DownloadFileOption): DownloadTask;
    type DownloadTaskOnHeadersReceivedCallback = (result?: {
        header: object;
    }) => void;
    type DownloadTaskOnProgressUpdateCallback = (result: {
        /** 下载进度百分比 */
        progress: number;
        /** 预期需要下载的数据总长度，单位 Bytes */
        totalBytesExpectedToWrite: number;
        /** 已经下载的数据长度，单位 Bytes */
        totalBytesWritten: number;
    }) => void;
    interface DownloadFileOption {
        /** 下载资源的 url */
        url: string;
        /** 指定文件下载后存储的路径
         *
         * 最低基础库： `1.8.0`
         */
        filePath?: string;
        /** HTTP 请求的 Header，Header 中不能设置 Referer */
        header?: object;
        /** 接口调用结束的回调函数（调用成功、失败都会执行） */
        complete?(res: {
            errMsg: string;
        }): void;
        /** 接口调用失败的回调函数 */
        fail?(res: {
            errMsg: string;
        }): void;
        /** 接口调用成功的回调函数 */
        success?(result: DownloaderReponse): void;
    }
    interface DownloadTask {
        /**
         *
         * 中断下载任务
         *
         * 最低基础库： `1.4.0`
         */
        abort(): void;
        onHeadersReceived(
        /** HTTP Response Header 事件的回调函数 */
        callback: DownloadTaskOnHeadersReceivedCallback): void;
        /** [DownloadTask.onProgressUpdate(function callback)](DownloadTask.onProgressUpdate.md)
         *
         * 监听下载进度变化事件
         *
         * 最低基础库： `1.4.0`
         */
        onProgressUpdate(
        /** 下载进度变化事件的回调函数 */
        callback: DownloadTaskOnProgressUpdateCallback): void;
    }
}
export interface DownloaderReponse extends GeneralCallbackResult {
    /** 开发者服务器返回的 HTTP 状态码 */
    statusCode: number;
    /** 临时文件路径。如果没传入 filePath 指定文件存储路径，则下载后的文件会存储到一个临时文件 */
    tempFilePath: string;
}
export {};
//# sourceMappingURL=downloader.d.ts.map