import { AxiosInstance } from "axios";
import { Provider, UserDefinedProvider, ProviderReference } from "./providers";
/**
 * Proxy configuration object.
 */
export interface ProxyConfiguration {
    host: string;
    port: number;
    auth: {
        username: string;
        password: string;
    };
}
/**
 * Config object that initializes with configuration data
 * passed in by the user.
 *
 * @export
 * @class Config
 */
export declare class Config {
    /**
     * Array of active curency API providers.
     *
     * @type {Provider[]}
     * @memberof Config
     */
    private _active;
    /**
     * Provider getter.
     *
     * @returns {Provider[]}
     * @memberof Config
     */
    get providers(): Provider[];
    /**
     * Active client.
     */
    private _client;
    /**
     * Client setter.
     * @param client  The client.
     */
    setClient: (client: AxiosInstance) => void;
    /**
     * Client getter.
     */
    getClient: () => AxiosInstance;
    /**
     * Provider setter (adder).
     *
     * @param {Provider[]} providers - providers to be added
     * @param {boolean} [setActive=false] - should the new provider(s) be prioritized
     * @returns {void}
     * @memberof Config
     */
    private addProviders;
    /**
     * Adds a single new, user-defined provider to the list of providers.
     *
     * @param {string} name - the new provider name
     * @param {Provider} provider - the new provider object
     * @param {boolean} [setActive=false] - should the new provider(s) be prioritized
     * @memberof Config
     */
    add: (name: string, provider: Provider, setActive?: boolean) => void;
    /**
     * Adds multiple new, user-defined provider to the list of providers.
     *
     * @param {UserDefinedProvider[]} providers - providers to be added
     * @param {boolean} [setActive=false] - should the new provider(s) be prioritized
     * @memberof Config
     */
    addMultiple: (newProviders: UserDefinedProvider[], setActive?: boolean) => void;
    /**
     * Removes a specific provider
     * @param {Provider} provider - provider to be removed
     * @memberof Config
     */
    remove: (provider: Provider) => void;
    /**
     * Returns the current provider
     *
     * @returns {Provider} - current provider
     * @memberof Config
     */
    activeProvider(): Provider;
    /**
     * Creates an instance of Config.
     * @param {(...ProviderReference[] | undefined[] | string[])} config
     * @memberof Config
     */
    constructor(...config: ProviderReference[] | undefined[] | string[]);
}
/**
 * Config resolver that normalizes configuration input into the config interface
 *
 * @export
 * @param {(...ProviderReference[] | undefined[] | string[])} configuration
 * @returns {Provider[]}
 */
export declare function resolveProviders(...configuration: ProviderReference[] | undefined[] | string[]): Provider[];
