type DeviceType = "display" | "camera" | "microphone";
type RecordingMode = "display" | "webcam";
interface Display {
    id: string;
    name: string;
}
interface Camera {
    id: string;
    name: string;
}
interface Microphone {
    id: string;
    name: string;
}
type DisplayRecordingItem = {
    type: "display";
    display: Display;
    microphone?: Microphone;
    shows_cursor?: boolean;
};
type WebcamRecordingItem = {
    type: "webcam";
    camera: Camera;
    microphone?: Microphone;
};
type RecordingItem = DisplayRecordingItem | WebcamRecordingItem;
interface RecorderOptions {
    output_directory: string;
    items: RecordingItem[];
}
interface FileResult {
    path: string;
    type: RecordingMode;
    deviceName?: string;
    dimensions?: {
        width: number;
        height: number;
    };
    durationInSeconds?: number;
}
interface RecordingResult {
    files: FileResult[];
}

declare class Recorder {
    private options;
    private outputDirectory;
    private processManager;
    private prepared;
    private recording;
    private recordingFiles;
    constructor(options: RecorderOptions);
    /**
     * Prepare the recorder
     */
    prepare(): Promise<void>;
    /**
     * Start recording
     */
    start(): Promise<void>;
    /**
     * Stop recording and return result
     */
    stop(): Promise<RecordingResult>;
    /**
     * Start recording a display
     */
    private startDisplayRecording;
    /**
     * Start recording a webcam
     */
    private startWebcamRecording;
}

declare function createOutputDirectory(customPath?: string): string;
declare function getDisplays(): Promise<Display[]>;
declare function getCameras(): Promise<Camera[]>;
declare function getMicrophones(): Promise<Microphone[]>;

export { type Camera, type DeviceType, type Display, type DisplayRecordingItem, type FileResult, type Microphone, Recorder, type RecorderOptions, type RecordingItem, type RecordingMode, type RecordingResult, type WebcamRecordingItem, createOutputDirectory, getCameras, getDisplays, getMicrophones };
