import { Optional } from "matrix-events-sdk";
import { Room, IEventRelation } from "matrix-js-sdk/src/matrix";
import { AsyncStoreWithClient } from "./AsyncStoreWithClient";
import { ActionPayload } from "../dispatcher/payloads";
import { VoiceMessageRecording } from "../audio/VoiceMessageRecording";
interface IState {
    [voiceRecordingId: string]: Optional<VoiceMessageRecording>;
}
export declare class VoiceRecordingStore extends AsyncStoreWithClient<IState> {
    private static internalInstance;
    constructor();
    static get instance(): VoiceRecordingStore;
    protected onAction(payload: ActionPayload): Promise<void>;
    static getVoiceRecordingId(room: Room, relation?: IEventRelation): string;
    /**
     * Gets the active recording instance, if any.
     * @param {string} voiceRecordingId The room ID (with optionally the thread ID if in one) to get the recording in.
     * @returns {Optional<VoiceRecording>} The recording, if any.
     */
    getActiveRecording(voiceRecordingId: string): Optional<VoiceMessageRecording>;
    /**
     * Starts a new recording if one isn't already in progress. Note that this simply
     * creates a recording instance - whether or not recording is actively in progress
     * can be seen via the VoiceRecording class.
     * @param {string} voiceRecordingId The room ID (with optionally the thread ID if in one) to start recording in.
     * @returns {VoiceRecording} The recording.
     */
    startRecording(voiceRecordingId?: string): VoiceMessageRecording;
    /**
     * Disposes of the current recording, no matter the state of it.
     * @param {string} voiceRecordingId The room ID (with optionally the thread ID if in one) to dispose of the recording in.
     * @returns {Promise<void>} Resolves when complete.
     */
    disposeRecording(voiceRecordingId: string): Promise<void>;
}
export {};
