/// <reference types="node" />
/// <reference types="node" />
import { Region, Global as GlobalRegion, RefreshTokenMethod } from "../client/types";
import { RefreshTokenManager } from "../helper/refreshTokenManager";
import { Agent as HttpAgent } from 'http';
import { Agent as HttpsAgent } from 'https';
declare const globalKey: unique symbol;
export interface RegionalHost {
    "eu-west-1"?: string;
    "eu-west-2"?: string;
    "eu-west-3"?: string;
    "eu-central-1"?: string;
    "us-east-1"?: string;
    "us-east-2"?: string;
    "us-west-1"?: string;
    "us-west-2"?: string;
    "ca-central-1"?: string;
}
export interface GlobalHost {
    global: string;
}
export interface Hosts {
    [key: string]: GlobalHost | RegionalHost;
}
declare global {
    namespace NodeJS {
        interface Global {
            [globalKey]?: Config;
            smashSdkHosts?: Hosts;
            smashSdkToken?: string;
            smashSdkRegion?: Region | GlobalRegion;
            smashSdkRefreshTokenMethod?: RefreshTokenMethod;
            smashSdkRefreshTokenManager?: RefreshTokenManager;
            smashSdkTimeout?: number;
            smashSdkHttpAgent?: HttpAgent;
            smashSdkHttpsAgent?: HttpsAgent;
        }
    }
    interface Window {
        [globalKey]?: Config;
        smashSdkHosts?: Hosts;
        smashSdkToken?: string;
        smashSdkRegion?: Region | GlobalRegion;
        smashSdkRefreshTokenMethod?: RefreshTokenMethod;
        smashSdkRefreshTokenManager?: RefreshTokenManager;
        smashSdkTimeout?: number;
        smashSdkHttpAgent?: HttpAgent;
        smashSdkHttpsAgent?: HttpsAgent;
    }
}
export declare class Config {
    private static instance;
    get hosts(): Hosts;
    set hosts(hosts: Hosts);
    get token(): string | undefined;
    set token(token: string | undefined);
    get region(): Region | GlobalRegion | undefined;
    set region(region: Region | GlobalRegion | undefined);
    get timeout(): number | undefined;
    set timeout(timeout: number | undefined);
    get httpAgent(): HttpAgent | undefined;
    set httpAgent(httpAgent: HttpAgent | undefined);
    get httpsAgent(): HttpsAgent | undefined;
    set httpsAgent(httpsAgent: HttpsAgent | undefined);
    get refreshTokenMethod(): RefreshTokenMethod | undefined;
    set refreshTokenMethod(refreshTokenMethod: RefreshTokenMethod | undefined);
    get refreshtokenManager(): RefreshTokenManager | undefined;
    set refreshtokenManager(refreshTokenManager: RefreshTokenManager | undefined);
    static get Instance(): Config;
    constructor();
    getHost(service: keyof Hosts, region?: Region | GlobalRegion): string;
    setHosts(service: string, hosts: RegionalHost | GlobalHost, overwrite?: boolean): void;
    setRegion(region: Region): void;
    getRegion(): Region | GlobalRegion | undefined;
    setToken(token: string): void;
    getToken(): string | undefined;
    setRefreshTokenMethod(refreshtokenMethod: RefreshTokenMethod): void;
    getRefreshTokenMethod(): RefreshTokenMethod | undefined;
    getRefreshTokenManager(): RefreshTokenManager | undefined;
    setTimeout(timeout: number): void;
    getTimeout(): number | undefined;
    setHttpAgent(httpAgent: HttpAgent): void;
    getHttpAgent(): HttpAgent | undefined;
    setHttpsAgent(httpsAgent: HttpsAgent): void;
    getHttpsAgent(): HttpsAgent | undefined;
}
export declare const config: Config;
export {};
