import { LogLevel, Logger, PlatformConfig } from 'homebridge';
import { HomebridgePluginUiServer } from '@homebridge/plugin-ui-utils';
import { FormSchema } from './schema.js';
import { ConfigPlugin } from '../config-types.js';
import { ClientIDStatus } from './server-clientid.js';
export interface ServerRequests {
    '/log': {
        request: LogLevel;
        response: string;
    };
    '/clientid': {
        request: ConfigPlugin;
        response: ClientIDStatus;
    };
    '/clientid/retry': {
        request: null;
        response: ClientIDStatus;
    };
    '/config': {
        request: null;
        response: PlatformConfig;
    };
    '/schema/global': {
        request: null;
        response: FormSchema;
    };
    '/schema/appliance': {
        request: string;
        response: FormSchema;
    };
}
export type ServerPath = keyof ServerRequests;
export type ServerRequest<Path extends ServerPath> = ServerRequests[Path]['request'];
export type ServerResponse<Path extends ServerPath> = ServerRequests[Path]['response'];
export type ServerResponseAsync<Path extends ServerPath> = Promise<ServerResponse<Path>> | ServerResponse<Path>;
export interface ServerEvents {
    ready: undefined;
    log: ServerLogMessage[];
    status: ClientIDStatus;
}
export type ServerEvent = keyof ServerEvents;
export type ServerEventData<Event extends ServerEvent> = ServerEvents[Event];
export interface ServerLogMessage {
    level: LogLevel;
    message: string;
    params: unknown[];
}
export declare class ServerIPC {
    readonly log: Logger;
    readonly server: HomebridgePluginUiServer;
    constructor(log: Logger, server: HomebridgePluginUiServer);
    onRequest<Path extends ServerPath>(path: Path, fn: (data: ServerRequest<Path>) => ServerResponseAsync<Path>): void;
    pushEvent<Event extends keyof ServerEvents>(event: Event, data: ServerEventData<Event>): void;
}
//# sourceMappingURL=server-ipc.d.ts.map