import { IKosServiceTransport } from './transport/webSocketTransport';
import { IKosRegistry } from './types/registration';
import { KosCoreState, coreFsm } from './lifecycle/kosCoreLifecycle';
import { IKosModelManager } from './types/kos-model-manager-types';
declare global {
    interface Window {
        KosCore: IKosCoreManager;
    }
}
export interface IKosCoreLifecycle {
    /**
     * lifecycle function to initialize the core and provide initial values that
     * will be used by the system.  For example, loading the logger, setting up
     * internationialization or performing any capability validation would occur here
     */
    init(): Promise<void>;
    load(): Promise<void>;
    unload(): Promise<void>;
    ready(): Promise<void>;
    online(): Promise<void>;
    offline(): Promise<void>;
    whenReady(): Promise<void>;
    reload(): Promise<void>;
    isReady: boolean;
}
export interface IKosWebSocketTransportContainer {
    transport: IKosServiceTransport;
    connectionAlias?: string;
}
export interface IKosModelManagerContainer {
    status: KosCoreState;
    isOnline: boolean;
    onlineStatus: boolean;
    modelManager: IKosModelManager;
}
export type IKosCoreManager = IKosCoreLifecycle & IKosModelManagerContainer & IKosWebSocketTransportContainer & {
    reloading: boolean;
};
export declare enum AuthState {
    LOGGED_IN = "logged_in",
    LOGGED_OUT = "logged_out"
}
export declare class KosCore implements IKosCoreManager {
    fsmService: ReturnType<typeof coreFsm>;
    private static _instance;
    status: KosCoreState;
    private initialized;
    private loaded;
    private _transport;
    modelManager: IKosModelManager;
    authState: AuthState;
    isOnline: boolean;
    private _reloading;
    private _unloading;
    connectionAlias?: string;
    private constructor();
    get onlineStatus(): boolean;
    get reloading(): boolean;
    get unloading(): boolean;
    reload(): Promise<void>;
    online(): Promise<void>;
    offline(): Promise<void>;
    unload(): Promise<void>;
    whenReady(): Promise<void>;
    ready(): Promise<void>;
    get isReady(): boolean;
    set transport(transport: IKosServiceTransport);
    get transport(): IKosServiceTransport;
    get coreInitialized(): boolean;
    get modelsLoaded(): boolean;
    init(): Promise<void>;
    load(): Promise<void>;
    static create(registry: IKosRegistry, reset?: boolean, connectionAlias?: string): IKosCoreManager;
    static getInstance(data?: {
        reset?: boolean;
        connectionAlias?: string;
    }): IKosCoreManager;
}
//# sourceMappingURL=kosCore.d.ts.map