import { AbstractRequest } from '../AbstractRequest';
import { Argument, RpcResponse, WithIds } from '../CommonTypes';
export declare type Files = {
    bytesCompleted: number;
    length: number;
    name: string;
};
export declare type FileStats = {
    bytesCompleted: number;
    wanted: boolean;
    priority: number;
};
export declare type Labels = {
    label: string;
};
export declare type Peers = {
    address: string;
    clientName: string;
    clientIsChoked: boolean;
    clientIsInterested: boolean;
    flagStr: string;
    isDownloadingFrom: boolean;
    isEncrypted: boolean;
    isIncoming: boolean;
    isUploadingTo: boolean;
    isUTP: boolean;
    peerIsChoked: boolean;
    peerIsInterested: boolean;
    port: number;
    progress: number;
    rateToClient: number;
    rateToPeer: number;
};
export declare type PeersFrom = {
    fromCache: number;
    fromDht: number;
    fromIncoming: number;
    fromLpd: number;
    fromLtep: number;
    fromPex: number;
    fromTracker: number;
};
export declare enum TorrentStatus {
    TorrentStopped = "Stopped",
    QueuedToCheckFiles = "Queued to Check files",
    CheckingFiles = "Checking files",
    QueueToDownload = "Queued",
    Downloading = "Downloading",
    QueueToSeed = "Queued to Seed",
    Seeding = "Seeding"
}
export declare type Trackers = {
    announce: string;
    id: number;
    scrape: string;
    tier: number;
};
export declare type TrackerStats = {
    announce: string;
    announceState: number;
    downloadCount: number;
    hasAnnounced: boolean;
    hasScraped: boolean;
    host: string;
    id: number;
    isBackup: boolean;
    lastAnnouncePeerCount: number;
    lastAnnounceResult: string;
    lastAnnounceStartTime: number;
    lastAnnounceSucceeded: boolean;
    lastAnnounceTime: number;
    lastAnnounceTimedOut: boolean;
    lastScrapeResult: string;
    lastScrapeStartTime: number;
    lastScrapeSucceeded: boolean;
    lastScrapeTime: number;
    lastScrapeTimedOut: boolean;
    leecherCount: number;
    nextAnnounceTime: number;
    nextScrapeTime: number;
    scrape: string;
    scrapeState: number;
    seederCount: number;
    tier: number;
};
export declare type WebSeeds = {
    webseed: string;
};
export declare type Torrent = {
    activityDate: number;
    addedDate: number;
    bandwidthPriority: number;
    comment: string;
    corruptEver: number;
    creator: string;
    dateCreated: number;
    desiredAvailable: number;
    doneDate: number;
    downloadDir: string;
    downloadedEver: number;
    downloadLimit: number;
    downloadLimited: boolean;
    editDate: number;
    error: number;
    errorString: string;
    eta: number;
    etaIdle: number;
    'file-count': number;
    files: Files[];
    fileStats: FileStats[];
    hashString: string;
    haveUnchecked: number;
    haveValid: number;
    honorsSessionLimits: boolean;
    id: number;
    isFinished: boolean;
    isPrivate: boolean;
    isStalled: boolean;
    labels: Labels[];
    leftUntilDone: number;
    magnetLink: string;
    manualAnnounceTime: number;
    maxConnectedPeers: number;
    metadataPercentComplete: number;
    name: string;
    peerLimit: number;
    peers: Peers[];
    peersConnected: number;
    peersFrom: PeersFrom;
    peersGettingFromUs: number;
    peersSendingToUs: number;
    percentDone: number;
    pieces: string;
    pieceCount: number;
    pieceSize: number;
    priorities: any[];
    'primary-mime-type': string;
    queuePosition: number;
    rateDownload: number;
    rateUpload: number;
    recheckProgress: number;
    secondsDownloading: number;
    secondsSeeding: number;
    seedIdleLimit: number;
    seedIdleMode: number;
    seedRatioLimit: number;
    seedRatioMode: number;
    sizeWhenDone: number;
    startDate: number;
    status: TorrentStatus;
    trackers: Trackers[];
    trackerStats: TrackerStats[];
    totalSize: number;
    torrentFile: string;
    uploadedEver: number;
    uploadLimit: number;
    uploadLimited: boolean;
    uploadRatio: number;
    wanted: boolean[];
    webseeds: WebSeeds[];
    webseedsSendingToUs: number;
};
export declare type TorrentKey = keyof Torrent;
export declare type GetTorrentRequestArguments = {
    fields: TorrentKey[];
} & WithIds & Argument;
export declare type GetTorrentResponseArguments = {
    torrents: Torrent[];
} & Argument;
export declare class GetTorrentRequest extends AbstractRequest<GetTorrentRequestArguments> {
    private constructor();
    static of(args: GetTorrentRequestArguments, tag?: number): GetTorrentRequest;
}
export declare type GetTorrentResponse = {} & RpcResponse<GetTorrentResponseArguments>;
