/// <reference types="node" />
import fetch, { Response } from 'node-fetch';
import { TheTvDbShow, TheTvDbShowEpisode, TheTvDbUpdatedShowId, TheTvDbShowImage } from './types';
interface Options {
    /**
      First timeout
    */
    timeout?: number;
    /**
      Canculate next timeout if the first timeout was met.
      @example
  
      const defaultNextTimeout = (currentTimeout: number) => {
        if (currentTimeout > 10000) {
          return null // Throw an timeout error
        }
        return currentTimeout + 1000 // timeout for the next try
      }
    */
    nextTimeout?: (currentTimeout: number) => number | null;
    /**
     * Custom fetch function
     */
    fetch?: typeof fetch;
}
export declare class TheTvDb {
    private apikey;
    private fetch;
    private options;
    jwt: Promise<string> | undefined;
    constructor(apikey: string, options?: Options);
    get token(): Promise<string>;
    fetchShow(theTvDbId: number, log?: (msg: string) => void): Promise<TheTvDbShow>;
    fetchShowEpisodes(theTvDbId: number, log?: (msg: string) => void): Promise<TheTvDbShowEpisode[]>;
    /**
     * Fetch the latest episodes.
     * Will return somewhere between 0 and numberOfEpisodes + 99 episodes
     */
    fetchLatestShowEpisodes(theTvDbId: number, numberOfEpisodes: number, log?: (msg: string) => void): Promise<TheTvDbShowEpisode[]>;
    fetchLastUpdateShowsList(lastUpdate: number, log?: (msg: string) => void): Promise<TheTvDbUpdatedShowId[]>;
    fetchEpisodeImage(episodeId: number, log?: (msg: string) => void): Promise<Buffer>;
    fetchShowPoster(showId: number, log?: (msg: string) => void): Promise<Buffer>;
    fetchShowFanart(showId: number, log?: (msg: string) => void): Promise<Buffer>;
    private fetchEpisodePage;
    private fetchImage;
    private get;
    private fetchToken;
}
export declare function getHigestRating(images: TheTvDbShowImage[]): TheTvDbShowImage;
export declare function handelHttpError(res: Response): Response;
export declare function ensureArray<T = any>(data: T[]): T[];
export {};
