import { FormData } from 'formdata-node';
import { IUploadOptions, IUploadParams, IUploadSourceMedia, IUploadConduct } from './types';
import { StoryAttachment, PhotoAttachment, AudioAttachment, VideoAttachment, DocumentAttachment, GraffitiAttachment, AudioMessageAttachment } from '../structures';
export declare class Upload {
    private api;
    protected options: Required<Omit<IUploadOptions, 'api'>>;
    /**
     * Constructor
     */
    constructor({ api, ...options }: IUploadOptions);
    /**
     * Returns custom tag
     */
    get [Symbol.toStringTag](): string;
    /**
     * Uploading photos to an album
     */
    photoAlbum(params: IUploadParams & {
        album_id: number;
        group_id?: number;
        caption?: string;
        latitude?: number;
        longitude?: number;
    }): Promise<PhotoAttachment[]>;
    /**
     * Uploading photos to the wall
     */
    wallPhoto(params: IUploadParams & {
        user_id?: number;
        group_id?: number;
        caption?: string;
        latitude?: number;
        longitude?: number;
    }): Promise<PhotoAttachment>;
    /**
     * Uploading the main photo of a user or community
     */
    ownerPhoto(params: IUploadParams & {
        owner_id?: number;
    }): Promise<{
        photo_hash: string;
        photo_src: string;
        photo_src_big: string;
        photo_src_small: string;
        saved: number;
        post_id: number;
    }>;
    /**
     * Uploading a photo to a private message
     */
    messagePhoto(params: IUploadParams & {
        peer_id?: number;
    }): Promise<PhotoAttachment>;
    /**
     * Uploading the main photo for a chat
     */
    chatPhoto(params: IUploadParams & {
        chat_id: number;
        crop_x?: number;
        crop_y?: number;
        crop_width?: number;
    }): Promise<{
        message_id: number;
        chat: object;
    }>;
    /**
     * Uploading a photo for a product
     */
    marketPhoto(params: IUploadParams & {
        group_id: number;
        main_photo?: number;
        crop_x?: number;
        crop_y?: number;
        crop_width?: number;
    }): Promise<PhotoAttachment>;
    /**
     * Uploads a photo for the selection of goods
     */
    marketAlbumPhoto(params: IUploadParams & {
        group_id: number;
    }): Promise<PhotoAttachment>;
    /**
     * Uploads audio
     */
    audio(params: IUploadParams & {
        title?: string;
        artist?: string;
    }): Promise<AudioAttachment>;
    /**
     * Uploads video
     */
    video(params: IUploadParams & {
        album_id?: number;
        group_id?: number;
        link?: string;
        name?: string;
        description?: string;
        is_private?: number;
        wallpost?: number;
        privacy_view?: string;
        privacy_comment?: string;
        no_comments?: number;
        repeat?: number;
        compression?: number;
    }): Promise<VideoAttachment>;
    /**
     * Uploads document
     */
    conductDocument(params: IUploadParams & {
        type?: string;
    }, { attachmentType }?: {
        attachmentType?: string | undefined;
    }): Promise<any>;
    /**
     * Uploads document
     */
    document(params: IUploadParams & {
        group_id?: number;
        title?: string;
        tags?: string;
    }): Promise<DocumentAttachment>;
    /**
     * Uploads wall document
     */
    conductWallDocument(params: IUploadParams & {
        type?: string;
    }, { attachmentType }?: {
        attachmentType?: string | undefined;
    }): Promise<any>;
    /**
     * Uploads wall document
     */
    wallDocument(params: IUploadParams & {
        group_id?: number;
        title?: string;
        tags?: string;
    }): Promise<DocumentAttachment>;
    /**
     * Uploads wall document
     */
    conductMessageDocument(params: IUploadParams & {
        type?: string;
    }, { attachmentType }?: {
        attachmentType?: string | undefined;
    }): Promise<any>;
    /**
     * Uploads message document
     */
    messageDocument(params: IUploadParams & {
        peer_id?: number;
        title?: string;
        tags?: string;
    }): Promise<DocumentAttachment>;
    /**
     * Uploads audio message
     */
    audioMessage(params: IUploadParams & {
        peer_id?: number;
        title?: string;
        tags?: string;
    }): Promise<AudioMessageAttachment>;
    /**
     * Uploads graffiti in documents
     */
    documentGraffiti(params: IUploadParams & {
        group_id?: number;
    }): Promise<GraffitiAttachment>;
    /**
     * Uploads graffiti in messages
     */
    messageGraffiti(params: IUploadParams & {
        peer_id?: number;
    }): Promise<GraffitiAttachment>;
    /**
     * Uploads community cover
     */
    groupCover(params: IUploadParams & {
        group_id: number;
        crop_x?: number;
        crop_y?: number;
        crop_x2?: number;
        crop_y2?: number;
    }): Promise<{
        images: {
            url: string;
            width: number;
            height: number;
        }[];
    }>;
    /**
     * Uploads photo stories
     */
    storiesPhoto(params: IUploadParams & {
        group_id?: number;
        add_to_news?: number;
        user_ids?: string[] | string;
        reply_to_story?: string;
        link_text: string;
        link_url: string;
        clickable_stickers?: string;
    }): Promise<StoryAttachment>;
    /**
     * Uploads video stories
     */
    storiesVideo(params: IUploadParams & {
        group_id?: number;
        add_to_news?: number;
        user_ids?: string[] | string;
        reply_to_story?: string;
        link_text: string;
        link_url: string;
        clickable_stickers?: string;
    }): Promise<StoryAttachment>;
    /**
     * Uploads poll photo
     */
    pollPhoto(params: IUploadParams & {
        owner_id?: number;
    }): Promise<Record<string, any>>;
    /**
     * Behavior for the upload method
     */
    conduct({ field, params, getServer, serverParams, saveFiles, saveParams, uploadParams, maxFiles, attachmentType, }: IUploadConduct): Promise<any>;
    /**
     * Building form data
     */
    buildPayload({ field, values, maxFiles, attachmentType, }: {
        field: string;
        values: IUploadSourceMedia[];
        maxFiles: number;
        attachmentType?: string;
    }): Promise<{
        formData: FormData;
        knownLength: boolean;
    }>;
    /**
     * Upload form data
     */
    upload(url: URL | string, { formData, timeout, forceBuffer }: {
        formData: FormData;
        timeout: number;
        forceBuffer: boolean;
    }): Promise<any>;
}
