import type TypedEmitter from 'typed-emitter';
import { Room, RoomConnectOptions, RoomOptions } from 'livekit-client';
export type LogMessage = {
    level: 'info' | 'warning' | 'error';
    message: any;
};
export declare enum LogLevel {
    INFO = "info",
    WARNING = "warning",
    ERROR = "error"
}
export declare enum CheckStatus {
    IDLE = 0,
    RUNNING = 1,
    SKIPPED = 2,
    SUCCESS = 3,
    FAILED = 4
}
export type CheckInfo = {
    name: string;
    logs: Array<LogMessage>;
    status: CheckStatus;
    description: string;
};
export interface CheckerOptions {
    errorsAsWarnings?: boolean;
    roomOptions?: RoomOptions;
    connectOptions?: RoomConnectOptions;
}
export type PerformParams = any;
declare const Checker_base: new () => TypedEmitter<CheckerCallbacks>;
export declare abstract class Checker extends Checker_base {
    protected url: string;
    protected token: string;
    room: Room;
    connectOptions?: RoomConnectOptions;
    status: CheckStatus;
    logs: Array<LogMessage>;
    errorsAsWarnings: boolean;
    name: string;
    constructor(url: string, token: string, options?: CheckerOptions);
    abstract get description(): string;
    protected abstract perform(params: PerformParams): Promise<void>;
    run(performParams?: PerformParams, onComplete?: () => void): Promise<CheckInfo>;
    protected isSuccess(): boolean;
    protected connect(): Promise<Room>;
    protected disconnect(): Promise<void>;
    protected skip(): void;
    protected appendMessage(message: any): void;
    protected appendWarning(message: string): void;
    protected appendError(message: string): void;
    protected setStatus(status: CheckStatus): void;
    getInfo(): CheckInfo;
}
export type InstantiableCheck<T extends Checker> = {
    new (url: string, token: string, options?: CheckerOptions): T;
};
type CheckerCallbacks = {
    update: (info: CheckInfo) => void;
};
export {};
