import { RuntimeInformation } from "./RuntimeInformation";
import { Config } from "./Config";
export interface PermissionInstance {
    check(permissionCollector: PermissionCollector, runtimeInformation: RuntimeInformation, additionalRuntimeInformation: Map<String, any>): void;
    start(): void;
    stop(): Promise<void>;
    reloadConfig(config: Config): Promise<void>;
}
export declare class PermissionError extends Error {
    readonly permissionCollector: PermissionCollector;
    constructor(permissionCollector: PermissionCollector);
}
export declare class Reason {
    readonly name: string;
    readonly viewerMessage: string;
    constructor(name: string, viewerMessage: string);
}
export declare class PermissionController {
    private readonly permissionInstances;
    private readonly additionalRuntimeInformation;
    constructor();
    withPermissionInstance(instance: PermissionInstance): PermissionController;
    checkPermissions(runtimeInformation: RuntimeInformation): Promise<PermissionCollector>;
    setAdditionalRuntimeInformation(name: string, value: any): void;
    start(): Promise<void>;
    stop(): Promise<void>;
    reloadConfig(config: Config): Promise<void>;
}
export declare class PermissionCollector {
    private _permissionDenied;
    private _godMode;
    private readonly _godModeReasons;
    private readonly _permissionDeniedReasons;
    constructor();
    denyPermission(reason: string, message: string): void;
    enableGodMode(reason: string): void;
    get permissionDenied(): boolean;
    get permissionDeniedReasons(): Array<Reason>;
    get godMode(): boolean;
    get godModeReasons(): Array<String>;
}
//# sourceMappingURL=PermissionController.d.ts.map