import { rateLimitOptions } from "axios-rate-limit";
import { AgeRating, AgeRatingContentDescription, AlternativeName, Artwork, Character, CharacterMugShot, Collection, Company, CompanyLogo, CompanyWebsite, Cover, ExternalGame, Franchise, Game, GameEngine, Query, ImageOptions, GameEngineLogo, GameMode, GameVersion, GameVersionFeature, GameVersionFeatureValue, GameVideo, Genre, InvolvedCompany, Keyword, MultiplayerMode, Platform, PlatformFamily, PlatformLogo, PlatformVersion, PlatformVersionReleaseDate, PlatformWebsite, PlayerPerspective, ReleaseDate, Screenshot, Search, Theme, Website, PlatformVersionCompany, UntypedIGDBOptions, DefaultIGDBOptions, SearchableIGDBOptions } from './types';
export declare class IGDB {
    private clientId;
    private clientToken;
    private clientSecret;
    private API_URL;
    private IMAGE_URL;
    _axios: import("axios-rate-limit").RateLimitedAxiosInstance;
    private onAccessTokenRetrieved;
    private tokenExpiry;
    /**
     * Use function init() before calling endpoints.
     */
    constructor();
    /**
     * Initialises wrapper and generates access token (if needed) to call API.
     * @param clientId - Twitch Client Id
     * @param clientSecret - Twitch Client Secret
     * @param clientToken - Twitch App Access Token
     * @param rateLimitOptions - Axios Rate Limit Options. Default is 4 requests/s as per IGDB documentation.
     * @param onAccessTokenRetrieved - Callback which can be used to save token to storage. Includes timestamp of when the token will expire.
     */
    init(clientId: string, clientSecret: string, clientToken?: {
        token: string;
        tokenExpiry: number;
    }, onAccessTokenRetrieved?: (token: string, tokenExpiry: number) => void, rateLimitOptions?: rateLimitOptions): Promise<void>;
    /**
     * Ensures token is valid and has not expired.
     */
    private validateToken;
    /**
     * Can be used to generate a new access token.
     *
     * As per documentation, the access token cannot be refreshed. Therefore, when an access token expires you need create a new one.
     *
     * https://dev.twitch.tv/docs/authentication/refresh-tokens
     */
    private getToken;
    private buildFilter;
    private buildCombinedFilter;
    private buildOptions;
    private buildUntypedOptions;
    private request;
    private buildMultiQuery;
    /**
     * Get a multiquery.
     *
     *
     * Maximum of 10 Queries.
     *
     * {@link https://api-docs.igdb.com/#multi-query}
     * @param {Array} queries - an array of [Query]({@link Query})
     * @returns any[]
    **/
    multiQuery(queries: Query[]): Promise<any[]>;
    /**
     * Get an Image URL.
     * {@link https://api-docs.igdb.com/#images}
     * @param {Object} imageOptions - [Image Options]({@link ImageOptions})
     *
    **/
    getImageUrl({ imageId, size, retina }: ImageOptions): string;
    /**
     * Generic Endpoint Call.
     *
     * Provide your own endpoint and response type.
     *
     * {@link https://api-docs.igdb.com/#about}
     * @param {Object} options - [Untyped Endpoint Options]({@link UntypedIGDBOptions})
     *
    **/
    get<T>(endpoint: string, options?: UntypedIGDBOptions): Promise<T>;
    /**
     * Get Age Ratings.
     * {@link https://api-docs.igdb.com/#age-rating}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getAgeRatings(options?: DefaultIGDBOptions<AgeRating>): Promise<AgeRating[]>;
    /**
     * Get Age Rating Content Descriptions.
     * {@link https://api-docs.igdb.com/#age-rating-content-description}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getAgeRatingContentDescriptions(options?: DefaultIGDBOptions<AgeRatingContentDescription>): Promise<AgeRatingContentDescription[]>;
    /**
     * Get Alternative Names.
     * {@link https://api-docs.igdb.com/#alternative-name}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getAlternativeNames(options?: DefaultIGDBOptions<AlternativeName>): Promise<AlternativeName[]>;
    /**
     * Get Artworks.
     * {@link https://api-docs.igdb.com/#artwork}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getArtworks(options?: DefaultIGDBOptions<Artwork>): Promise<Artwork[]>;
    /**
     * Get Characters.
     * {@link https://api-docs.igdb.com/#character}
     * @param {Object} options - [Searchable Endpoint Options]({@link SearchableIGDBOptions})
     *
    **/
    getCharacters(options?: SearchableIGDBOptions<Character>): Promise<Character[]>;
    /**
     * Get Character Mug Shot.
     * {@link https://api-docs.igdb.com/#character-mug-shot}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getCharacterMugShots(options?: DefaultIGDBOptions<CharacterMugShot>): Promise<CharacterMugShot[]>;
    /**
     * Get Collections.
     * {@link https://api-docs.igdb.com/#collection}
     * @param {Object} options - [Searchable Endpoint Options]({@link SearchableIGDBOptions})
     *
    **/
    getCollections(options?: SearchableIGDBOptions<Collection>): Promise<Collection[]>;
    /**
     * Get Companies.
     * {@link https://api-docs.igdb.com/#company}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getCompanies(options?: DefaultIGDBOptions<Company>): Promise<Company[]>;
    /**
     * Get Company Logos.
     * {@link https://api-docs.igdb.com/#company-logo}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getCompanyLogos(options?: DefaultIGDBOptions<CompanyLogo>): Promise<CompanyLogo[]>;
    /**
     * Get Company Website.
     * {@link https://api-docs.igdb.com/#company-website}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getCompanyWebsite(options?: DefaultIGDBOptions<CompanyWebsite>): Promise<CompanyWebsite[]>;
    /**
     * Get Covers.
     * {@link https://api-docs.igdb.com/#cover}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getCovers(options?: DefaultIGDBOptions<Cover>): Promise<Cover[]>;
    /**
     * Get External Games.
     * {@link https://api-docs.igdb.com/#external-game}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getExternalGames(options?: DefaultIGDBOptions<ExternalGame>): Promise<ExternalGame[]>;
    /**
     * Get Franchises.
     * {@link https://api-docs.igdb.com/#franchise}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getFranchises(options?: DefaultIGDBOptions<Franchise>): Promise<Franchise[]>;
    /**
     * Get Games.
     * {@link https://api-docs.igdb.com/#game}
     * @param {Object} options - [Searchable Endpoint Options]({@link SearchableIGDBOptions})
     *
    **/
    getGames(options?: SearchableIGDBOptions<Game>): Promise<Game[]>;
    /**
     * Get Game Engines.
     * {@link https://api-docs.igdb.com/#game-engine}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getGameEngines(options?: DefaultIGDBOptions<GameEngine>): Promise<GameEngine[]>;
    /**
     * Get Game Engine Logos.
     * {@link https://api-docs.igdb.com/#game-engine-logo}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getGameEngineLogos(options?: DefaultIGDBOptions<GameEngineLogo>): Promise<GameEngineLogo[]>;
    /**
     * Get Game Modes.
     * {@link https://api-docs.igdb.com/#game-mode}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getGameModes(options?: DefaultIGDBOptions<GameMode>): Promise<GameMode[]>;
    /**
     * Get Game Versions.
     * {@link https://api-docs.igdb.com/#game-version}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getGameVersions(options?: DefaultIGDBOptions<GameVersion>): Promise<GameVersion[]>;
    /**
     * Get Game Version Features.
     * {@link https://api-docs.igdb.com/#game-version-feature}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getGameVersionFeatures(options?: DefaultIGDBOptions<GameVersionFeature>): Promise<GameVersionFeature[]>;
    /**
     * Get Game Version Feature Values.
     * {@link https://api-docs.igdb.com/#game-engine-feature-value}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getGameVersionFeatureValues(options?: DefaultIGDBOptions<GameVersionFeatureValue>): Promise<GameVersionFeatureValue[]>;
    /**
     * Get Game Videos.
     * {@link https://api-docs.igdb.com/#game-video}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getGameVideos(options?: DefaultIGDBOptions<GameVideo>): Promise<GameVideo[]>;
    /**
     * Get Genres.
     * {@link https://api-docs.igdb.com/#genre}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getGenres(options?: DefaultIGDBOptions<Genre>): Promise<Genre[]>;
    /**
     * Get Involved Companies.
     * {@link https://api-docs.igdb.com/#involved-company}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getInvolvedCompanies(options?: DefaultIGDBOptions<InvolvedCompany>): Promise<InvolvedCompany[]>;
    /**
     * Get Keywords.
     * {@link https://api-docs.igdb.com/#keyword}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getKeywords(options?: DefaultIGDBOptions<Keyword>): Promise<Keyword[]>;
    /**
     * Get Multiplayer Modes.
     * {@link https://api-docs.igdb.com/#multiplayer-mode}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getMultiplayerModes(options?: DefaultIGDBOptions<MultiplayerMode>): Promise<MultiplayerMode[]>;
    /**
     * Get Platform.
     * {@link https://api-docs.igdb.com/#platform}
     * @param {Object} options - [Searchable Endpoint Options]({@link SearchableIGDBOptions})
     *
    **/
    getPlatforms(options?: SearchableIGDBOptions<Platform>): Promise<Platform[]>;
    /**
     * Get Platform Families.
     * {@link https://api-docs.igdb.com/#platform-family}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getPlatformFamilies(options?: DefaultIGDBOptions<PlatformFamily>): Promise<PlatformFamily[]>;
    /**
     * Get Platform Logos.
     * {@link https://api-docs.igdb.com/#platform-logo}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getPlatformLogos(options?: DefaultIGDBOptions<PlatformLogo>): Promise<PlatformLogo[]>;
    /**
     * Get Platform Versions.
     * {@link https://api-docs.igdb.com/#platform-version}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getPlatformVersion(options?: DefaultIGDBOptions<PlatformVersion>): Promise<PlatformVersion[]>;
    /**
     * Get Platform Version Companies.
     * {@link https://api-docs.igdb.com/#platform-version-company}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getPlatformVersionCompanies(options?: DefaultIGDBOptions<PlatformVersionCompany>): Promise<PlatformVersionCompany[]>;
    /**
     * Get Platform Version Release Dates.
     * {@link https://api-docs.igdb.com/#platform-version-release_date}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getPlatformVersionReleaseDates(options?: DefaultIGDBOptions<PlatformVersionReleaseDate>): Promise<PlatformVersionReleaseDate[]>;
    /**
     * Get Platform Websites.
     * {@link https://api-docs.igdb.com/#platform-website}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getPlatformWebsites(options?: DefaultIGDBOptions<PlatformWebsite>): Promise<PlatformWebsite[]>;
    /**
     * Get Player Perspectives.
     * {@link https://api-docs.igdb.com/#player-perspective}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getPlayerPerspectives(options?: DefaultIGDBOptions<PlayerPerspective>): Promise<PlayerPerspective[]>;
    /**
     * Get Release Dates.
     * {@link https://api-docs.igdb.com/#release-date}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getReleaseDates(options?: DefaultIGDBOptions<ReleaseDate>): Promise<ReleaseDate[]>;
    /**
     * Get Screenshots.
     * {@link https://api-docs.igdb.com/#screenshot}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getScreenshots(options?: DefaultIGDBOptions<Screenshot>): Promise<Screenshot[]>;
    /**
     * Search IGDB.
     * {@link https://api-docs.igdb.com/#search}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    search(options?: DefaultIGDBOptions<Search>): Promise<Search[]>;
    /**
     * Get Themes.
     * {@link https://api-docs.igdb.com/#theme}
     * @param {Object} options - [Searchable Endpoint Options]({@link SearchableIGDBOptions})
     *
    **/
    getThemes(options?: SearchableIGDBOptions<Theme>): Promise<Theme[]>;
    /**
     * Get Websites.
     * {@link https://api-docs.igdb.com/#website}
     * @param {Object} options - [Default Endpoint Options]({@link DefaultIGDBOptions})
     *
    **/
    getWebsites(options?: DefaultIGDBOptions<Website>): Promise<Website[]>;
}
