import { IRouterClient } from "./routerClient";
import { StandardError } from "../types";
import { LogMessage, CentralLoggerClientState, LogLevel, LogCategory } from "../services/logger/types";
/**
 * @ignore
 */
export declare class LoggerConnection {
    routerClient: IRouterClient | null;
    viewId: number | null;
    isRegistering: boolean;
    isRegistered: boolean;
    calibratedTimeStampOffset: number;
    newCalibratedTimeStampOffset: number;
    filteredMessagesCounter: number;
    startupTime: number;
    loggerQueue: LogMessage[];
    loggerClientName: string;
    onLogStateChangeCallback: ((newState: CentralLoggerClientState) => void)[];
    currentLogState: CentralLoggerClientState;
    system: {
        error: (...args: any[]) => void;
        warn: (...args: any[]) => void;
        info: (...args: any[]) => void;
        log: (...args: any[]) => void;
        debug: (...args: any[]) => void;
        verbose: (...args: any[]) => void;
        deprecated: (...args: any[]) => void;
    };
    perf: {
        error: (...args: any[]) => void;
        warn: (...args: any[]) => void;
        info: (...args: any[]) => void;
        log: (...args: any[]) => void;
        debug: (...args: any[]) => void;
        verbose: (...args: any[]) => void;
        deprecated: (...args: any[]) => void;
    };
    /**
     * Writes to "system" and also the local console. Use this when you need console messages
     * prior to connecting with the logger service.
     */
    console: {
        error: (...args: any[]) => void;
        warn: (...args: any[]) => void;
        info: (...args: any[]) => void;
        log: (...args: any[]) => void;
        debug: (...args: any[]) => void;
        verbose: (...args: any[]) => void;
        deprecated: (...args: any[]) => void;
    };
    transmitAndClearQueue: () => void;
    constructor();
    updateQueueBasedOnState(calibrateTimeFlag: boolean): void;
    onStateChanged(cb: (newState: CentralLoggerClientState) => void): void;
    setLogState(state: CentralLoggerClientState, calibrateTimeFlag: boolean): void;
    addToQueue(message: LogMessage): void;
    callStack(): string;
    setting(): CentralLoggerClientState;
    outputToConsole(level: LogLevel, args: any[]): void;
    formatAndQueueMessage(category: LogCategory, level: LogLevel, args: any[]): void;
    logIt(category: LogCategory, level: LogLevel, args: any[]): void;
    error(...args: any[]): void;
    warn(...args: any[]): void;
    info(...args: any[]): void;
    log(...args: any[]): void;
    debug(...args: any[]): void;
    verbose(...args: any[]): void;
    deprecated(...args: any[]): void;
    completeRegistration(loggerState?: CentralLoggerClientState): void;
    registerWithLoggerService(): void;
    unregisterClient(params?: {
        clientName: string;
        deleteFromPersistence?: boolean;
        viewId?: number;
    }, cb?: (err: StandardError, data?: any) => void): void;
    setRouterClient: (routerClient: IRouterClient) => void;
    waitForServiceAndCalibrate(): void;
    start(routerClient?: IRouterClient): Promise<void>;
}
/**
 * Log a dev error message.
 *
 * ```JavaScript
 * FSBL.Clients.Logger.error("some message", parm1, parm2);
 * ```
 * @param {any} message parameter of any type that can be stringified (e.g. string, object)
 */
export declare const error: (...args: any[]) => void;
/**
 * Log a dev warning message.
 *
 *
 * ```JavaScript
 * FSBL.Clients.Logger.warn("some message", parm1, parm2);
 * ```
 * @param {any} message parameter of any type that can be stringified (e.g. string, object)
 */
export declare const warn: (...args: any[]) => void;
/**
 * Log a dev info message.
 *
 * ```JavaScript
 * FSBL.Clients.Logger.info("some message", parm1, parm2);
 * ```
 * @param {any} message parameter of any type that can be stringified (e.g. string, object)
 */
export declare const info: (...args: any[]) => void;
/**
 * Log a dev log message.
 *
 * ```JavaScript
 * FSBL.Clients.Logger.log("some message", parm1, parm2);
 * ```
 * @param {any} message parameter of any type that can be stringified (e.g. string, object)
 */
export declare const log: (...args: any[]) => void;
/**
 * Log a dev debug message.
 *
 * ```JavaScript
 * FSBL.Clients.Logger.debug("some message", parm1, parm2);
 * ```
 * @param {any} message parameter of any type that can be stringified (e.g. string, object)
 */
export declare const debug: (...args: any[]) => void;
/**
 * Log a dev verbose message (an extra level of verbose-debug output).
 *
 * ```JavaScript
 * FSBL.Clients.Logger.verbose("some message", parm1, parm2);
 * ```
 * @param {any} message parameter of any type that can be stringified (e.g. string, object)
 */
export declare const verbose: (...args: any[]) => void;
/**
 * Log the use of a deprecated API, config, component, or otherwise
 *
 * ```JavaScript
 * FSBL.Clients.Logger.deprecated("some message", parm1, parm2);
 * ```
 * @param {any} message parameter of any type that can be stringified (e.g. string, object)
 * @ignore
 */
export declare const deprecated: (...args: any[]) => void;
declare const CentralLoggerClient: {
    error: (...args: any[]) => void;
    warn: (...args: any[]) => void;
    info: (...args: any[]) => void;
    log: (...args: any[]) => void;
    debug: (...args: any[]) => void;
    verbose: (...args: any[]) => void;
    /**
     * @private
     */
    deprecated: (...args: any[]) => void;
    /**
     * Starts the logger client. There is no need to wait for this method to finish
     * because the logger client queues messages until it connects. logger.start() must be
     * called explicitly by each FSBL entry point.
     * @private
     */
    start: (routerClient?: {
        onReady: (cb?: (() => void) | undefined) => Promise<void>;
        addListener: <T = any>(channel: string, eventHandler: import("./routerClient").ListenerCallback<T>) => import("./routerClient").RouterListenerUnsubscribe;
        transmit: <T_1 = any>(toChannel: string, data: T_1, options?: {
            suppressWarnings: boolean;
        } | undefined) => void;
        removeListener: (channel: string, eventHandler: Function) => void;
        addResponder: <Q = any, R = any>(channel: string, queryEventHandler: import("../types").StandardErrorCallback<import("./routerClient").ResponderMessage<Q, R>>) => void;
        query: <Q_1 = any, R_1 = any>(responderChannel: string, queryEvent: Q_1, queryParams?: {
            timeout?: number | undefined;
            logWhenNoResponder?: boolean | undefined;
        } | import("./routerClient").QueryResponseCallback<R_1> | undefined, responseEventHandler?: import("./routerClient").QueryResponseCallback<R_1> | undefined) => Promise<import("./routerClient").StandardQueryResponse<R_1>>;
        removeResponder: (responderChannel: string) => void;
        addPubSubResponder: <T_2 = any>(topic: string | RegExp, initialState?: object | undefined, params?: {
            subscribeCallback?: import("./routerClient").SubscribeCallback<T_2> | undefined;
            unsubscribeCallback?: import("./routerClient").UnsubscribeCallback | undefined;
            publishCallback?: import("./routerClient").PublishCallback<T_2> | undefined;
        } | undefined, callback?: ((err?: string | Error | undefined, result?: "success" | undefined) => void) | undefined) => void;
        removePubSubResponder: (topic: string | RegExp) => void;
        subscribe: <T_3 = any>(topic: string, notifyCallback: (err: StandardError, response: import("./routerClient").SubscriberResponse<T_3>) => void) => {
            subscribeID: string;
            topic: string;
        };
        publish: <T_4 = any>(topic: string, event: T_4) => void;
        unsubscribe: (subscribeIDStruct: {
            subscribeID: string;
            topic: string;
        }) => void;
        trustedMessage: (incomingMessage: import("./routerClient").RouterMessage<any>) => boolean;
        disconnectAll: () => void;
        calibrateTimeWithRouterService(callback: (offset: number) => void): void;
    } | undefined) => void;
    /**
     * @private
     */
    channelFilter: (channel: string) => boolean;
    /**
     * @private
     */
    setting: () => CentralLoggerClientState;
    /**
     * @private
     */
    callStack: () => string;
    /**
     * @private
     */
    unregisterClient: (params?: {
        clientName: string;
        deleteFromPersistence?: boolean | undefined;
        viewId?: number | undefined;
    } | undefined, cb?: ((err: StandardError, data?: any) => void) | undefined) => void;
    /**
     * Sets the router client for this instance of the Logger client.
     * @private
     */
    setRouterClient: (routerClient: IRouterClient) => void;
    /**
     * Used by assimilation service
     * @private
     */
    onStateChanged(cb: (newState: CentralLoggerClientState) => void): void;
    /**
     * @private
     */
    system: {
        error: (...args: any[]) => void;
        warn: (...args: any[]) => void;
        info: (...args: any[]) => void;
        log: (...args: any[]) => void;
        debug: (...args: any[]) => void;
        verbose: (...args: any[]) => void;
        deprecated: (...args: any[]) => void;
    };
    /**
     * @private
     */
    perf: {
        error: (...args: any[]) => void;
        warn: (...args: any[]) => void;
        info: (...args: any[]) => void;
        log: (...args: any[]) => void;
        debug: (...args: any[]) => void;
        verbose: (...args: any[]) => void;
        deprecated: (...args: any[]) => void;
    };
    /**
     * @private
     *
     * logger.console.<level> is equivalent to logger.system.<level> except that the log
     * message is also displayed in the developer tools debugger. This set of functions
     * obeys the log level that is set within Central Logger (whereas `console.log` does not).
     *
     * When a window is starting up, logger.console.<level> will *always* log to the console
     * if it is called before the window has received its initial log level settings from
     * the logger service. This can be useful for debugging startup issues (without creating
     * stray console.log() statements).
     */
    console: {
        error: (...args: any[]) => void;
        warn: (...args: any[]) => void;
        info: (...args: any[]) => void;
        log: (...args: any[]) => void;
        debug: (...args: any[]) => void;
        verbose: (...args: any[]) => void;
        deprecated: (...args: any[]) => void;
    };
};
/** An implementation of the ICentralLogger interface that
 * merely logs straight to the console rather than going over to
 * Central Logging service. Used in situations where use of the
 * Central Logging service is not possible (such as in test
 * environments, or in the Central Logging service itself).
 * @ignore
 */
export declare const LocalLogger: ICentralLogger;
/**
 * @ignore
 */
export declare type ICentralLogger = typeof CentralLoggerClient;
/**
 * @ignore
 */
export declare const LoggerClient: ICentralLogger;
/**
 * Backward compatibility in case anyone out there is still importing Logger
 * @ignore
 */
export declare const Logger: {
    error: (...args: any[]) => void;
    warn: (...args: any[]) => void;
    info: (...args: any[]) => void;
    log: (...args: any[]) => void;
    debug: (...args: any[]) => void;
    verbose: (...args: any[]) => void;
    /**
     * @private
     */
    deprecated: (...args: any[]) => void;
    /**
     * Starts the logger client. There is no need to wait for this method to finish
     * because the logger client queues messages until it connects. logger.start() must be
     * called explicitly by each FSBL entry point.
     * @private
     */
    start: (routerClient?: {
        onReady: (cb?: (() => void) | undefined) => Promise<void>;
        addListener: <T = any>(channel: string, eventHandler: import("./routerClient").ListenerCallback<T>) => import("./routerClient").RouterListenerUnsubscribe;
        transmit: <T_1 = any>(toChannel: string, data: T_1, options?: {
            suppressWarnings: boolean;
        } | undefined) => void;
        removeListener: (channel: string, eventHandler: Function) => void;
        addResponder: <Q = any, R = any>(channel: string, queryEventHandler: import("../types").StandardErrorCallback<import("./routerClient").ResponderMessage<Q, R>>) => void;
        query: <Q_1 = any, R_1 = any>(responderChannel: string, queryEvent: Q_1, queryParams?: {
            timeout?: number | undefined;
            logWhenNoResponder?: boolean | undefined;
        } | import("./routerClient").QueryResponseCallback<R_1> | undefined, responseEventHandler?: import("./routerClient").QueryResponseCallback<R_1> | undefined) => Promise<import("./routerClient").StandardQueryResponse<R_1>>;
        removeResponder: (responderChannel: string) => void;
        addPubSubResponder: <T_2 = any>(topic: string | RegExp, initialState?: object | undefined, params?: {
            subscribeCallback?: import("./routerClient").SubscribeCallback<T_2> | undefined;
            unsubscribeCallback?: import("./routerClient").UnsubscribeCallback | undefined;
            publishCallback?: import("./routerClient").PublishCallback<T_2> | undefined;
        } | undefined, callback?: ((err?: string | Error | undefined, result?: "success" | undefined) => void) | undefined) => void;
        removePubSubResponder: (topic: string | RegExp) => void;
        subscribe: <T_3 = any>(topic: string, notifyCallback: (err: StandardError, response: import("./routerClient").SubscriberResponse<T_3>) => void) => {
            subscribeID: string;
            topic: string;
        };
        publish: <T_4 = any>(topic: string, event: T_4) => void;
        unsubscribe: (subscribeIDStruct: {
            subscribeID: string;
            topic: string;
        }) => void;
        trustedMessage: (incomingMessage: import("./routerClient").RouterMessage<any>) => boolean;
        disconnectAll: () => void;
        calibrateTimeWithRouterService(callback: (offset: number) => void): void;
    } | undefined) => void;
    /**
     * @private
     */
    channelFilter: (channel: string) => boolean;
    /**
     * @private
     */
    setting: () => CentralLoggerClientState;
    /**
     * @private
     */
    callStack: () => string;
    /**
     * @private
     */
    unregisterClient: (params?: {
        clientName: string;
        deleteFromPersistence?: boolean | undefined;
        viewId?: number | undefined;
    } | undefined, cb?: ((err: StandardError, data?: any) => void) | undefined) => void;
    /**
     * Sets the router client for this instance of the Logger client.
     * @private
     */
    setRouterClient: (routerClient: IRouterClient) => void;
    /**
     * Used by assimilation service
     * @private
     */
    onStateChanged(cb: (newState: CentralLoggerClientState) => void): void;
    /**
     * @private
     */
    system: {
        error: (...args: any[]) => void;
        warn: (...args: any[]) => void;
        info: (...args: any[]) => void;
        log: (...args: any[]) => void;
        debug: (...args: any[]) => void;
        verbose: (...args: any[]) => void;
        deprecated: (...args: any[]) => void;
    };
    /**
     * @private
     */
    perf: {
        error: (...args: any[]) => void;
        warn: (...args: any[]) => void;
        info: (...args: any[]) => void;
        log: (...args: any[]) => void;
        debug: (...args: any[]) => void;
        verbose: (...args: any[]) => void;
        deprecated: (...args: any[]) => void;
    };
    /**
     * @private
     *
     * logger.console.<level> is equivalent to logger.system.<level> except that the log
     * message is also displayed in the developer tools debugger. This set of functions
     * obeys the log level that is set within Central Logger (whereas `console.log` does not).
     *
     * When a window is starting up, logger.console.<level> will *always* log to the console
     * if it is called before the window has received its initial log level settings from
     * the logger service. This can be useful for debugging startup issues (without creating
     * stray console.log() statements).
     */
    console: {
        error: (...args: any[]) => void;
        warn: (...args: any[]) => void;
        info: (...args: any[]) => void;
        log: (...args: any[]) => void;
        debug: (...args: any[]) => void;
        verbose: (...args: any[]) => void;
        deprecated: (...args: any[]) => void;
    };
};
/**
 * Ignore
 */
export default LoggerClient;
//# sourceMappingURL=logger.d.ts.map