import { IRequestOptions, ResponseObject, IUploadRequestOptions, IFetchOptions } from '@cloudbase/adapter-interface';
import { EndPointKey, KV } from '@cloudbase/types';
import { ICustomReqOpts } from '@cloudbase/types/functions';
import { IGetAccessTokenResult, ICloudbaseRequestConfig } from '@cloudbase/types/request';
export interface IGateWayOptions {
    name?: string;
    data?: any;
    path?: string;
    method: string;
    header?: {};
    url?: string;
}
export interface ICloudbaseRequest {
    post: (options: IRequestOptions) => Promise<ResponseObject>;
    upload: (options: IUploadRequestOptions) => Promise<ResponseObject>;
    download: (options: IRequestOptions) => Promise<ResponseObject>;
    request: (action: string, params: KV<any>, options?: KV<any>) => Promise<ResponseObject>;
    send: (action: string, data: KV<any>) => Promise<any>;
    fetch: (options: IFetchOptions) => Promise<ResponseObject>;
}
export declare class CloudbaseRequest implements ICloudbaseRequest {
    config: ICloudbaseRequestConfig;
    private reqClass;
    private throwWhenRequestFail;
    private localCache;
    constructor(config: ICloudbaseRequestConfig & {
        throw?: boolean;
    });
    getAccessToken(token?: any): Promise<any>;
    getDefaultHeaders(): {
        [x: string]: string;
        'X-SDK-Version': string;
    };
    post(options: IRequestOptions, customReqOpts?: ICustomReqOpts): Promise<ResponseObject>;
    upload(options: IUploadRequestOptions): Promise<ResponseObject>;
    download(options: IRequestOptions): Promise<ResponseObject>;
    getBaseEndPoint(endPointKey?: EndPointKey): string;
    getOauthAccessTokenV2(oauthClient: any): Promise<IGetAccessTokenResult>;
    request(action: string, params: KV<any>, options?: {
        onUploadProgress?: Function;
        pathname?: string;
        parse?: boolean;
        inQuery?: KV<any>;
        search?: string;
        defaultQuery?: KV<any>;
        headers?: KV<string>;
        endPointMode?: 'CLOUD_API' | 'GATEWAY';
    }, customReqOpts?: ICustomReqOpts): Promise<ResponseObject>;
    fetch(options: IFetchOptions & {
        token?: string;
        withCredentials?: boolean;
        customReqOpts?: ICustomReqOpts;
    }): Promise<ResponseObject>;
    send(action: string, data?: KV<any>, options?: KV<any>, customReqOpts?: ICustomReqOpts): Promise<any>;
    gateWay(options: IGateWayOptions, customReqOpts?: ICustomReqOpts): Promise<{
        data: any;
        statusCode?: number;
        requestId: string;
    }>;
}
export declare function initRequest(config: ICloudbaseRequestConfig): void;
export declare function getRequestByEnvId(env: string): CloudbaseRequest;
