import { sesame } from './proto/api';
import { EaseKind } from './sesame-api-client';
import Long from 'long';
/** Makes specified keys required and non-nullable, keeping the rest as-is from the generated type. */
type WithRequired<T, K extends keyof T> = Omit<T, K> & {
    [P in K]-?: NonNullable<T[P]>;
};
export declare function keyframe(timeUs: number | Long, value: sesame.v1.common.IPropValue, easingIn?: EaseKind, easingOut?: EaseKind): sesame.v1.compositor.IKeyFrame;
export type CompositorID = string;
export type ReplayID = string;
export type AudioMixerID = string;
export type INodeConfig = WithRequired<Omit<sesame.v1.compositor.INodeAddRequest, 'nodeId'>, 'compositorId' | 'parentAddress' | 'nodeType'>;
export type IEncoderConfig = WithRequired<sesame.v1.outputs.IEncoderConfig, 'preset' | 'bitrateKbps'>;
export type IRecorderOutputConfig = WithRequired<Omit<sesame.v1.outputs.IEncodedRecorderOutputConfig, 'encoded'>, 'filename' | 'sizeGb' | 'groupId' | 'recorderType'>;
export type ISuperSlowmoRecorderOutputConfig = WithRequired<Omit<sesame.v1.outputs.IEncodedSuperSlowMoRecorderOutputConfig, 'encoded'>, 'filename' | 'sizeGb' | 'groupId' | 'recorderType' | 'compositionIds' | 'sourceIds'>;
export type IOutputConfig = Omit<sesame.v1.outputs.IOutputAddRequest, 'id'>;
export type IEncoderOutputConfig = WithRequired<sesame.v1.outputs.IOutputEncodedConfig, 'width' | 'height' | 'fps' | 'encoderConfig'>;
export type IDecklinkOutputConfig = WithRequired<sesame.v1.outputs.IDecklinkOutputConfig, 'deviceIndex' | 'videoFormat' | 'keyAndFill'>;
export type IAudioMixerChannel = WithRequired<sesame.v1.audio.IAudioMixerChannel, 'id' | 'sourceId' | 'channelType' | 'sourceChannels' | 'plugins' | 'level' | 'pan'>;
export type IAudioMixerConfig = WithRequired<sesame.v1.audio.IAudioMixerConfig, 'channels' | 'outputType' | 'order'>;
export type ISourceConfig = sesame.v1.sources.ISourceConfig;
export type IRecorderSourceConfig = WithRequired<sesame.v1.sources.IRecorderSourceConfig, 'recorderId'>;
export type ISourceTransportConfig = WithRequired<Omit<sesame.v1.sources.ISourceTransportCommand, 'sourceId'>, 'cmdType' | 'value'>;
export interface ITransportCommand {
    type: 'play' | 'pause' | 'stop' | 'seek' | 'seek_usertime' | 'jog' | 'live' | 'set_recorder' | 'load_playlist' | 'eject_playlist' | 'load_clip' | 'set_metadata' | 'take' | 'pre_roll' | 'post_roll' | 'next_playlist_clip' | 'skip_next_playlist_clip' | 'transitions_disabled' | 'set_scrubbing';
    value?: number | string;
    transactionId?: number;
    user?: string;
    id?: string;
}
export type IPlaylistClip = WithRequired<sesame.v1.recorder.IPlaylistItem, 'id' | 'recorderId'>;
export interface IPlaylist {
    id: string;
    duration: number;
    clips: IPlaylistClip[];
}
export interface ITransactionOptions {
    transactionId?: number;
    dependencies?: number[];
}
/**
 * CommandList helper class for building Sesame command sequences.
 *
 * Provides a fluent API for constructing command lists that can be sent to the Sesame server.
 *
 * @example
 * ```typescript
 * const cl = new CommandList();
 * cl.add_source('cam1', { sourceType: SourceType.ST_DECKLINK, decklinkConfig: { deviceIndex: 0 } });
 * cl.add_compositor('main', 1920, 1080, false);
 * await client.execute(cl);
 * ```
 */
export declare class CommandList {
    private cl;
    constructor();
    private add;
    applyTransaction(transaction: ITransactionOptions): void;
    getLength(): number;
    filterCreatedAndDestroyedSources(): void;
    get_command_list_msg(): sesame.v1.commands.CommandList;
    callback(event: string, data: string, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    add_compositor(id: string, width: number, height: number, multisample: boolean, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    remove_compositor(id: string, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    clear_compositor(id: string, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    add_source(id: string, cfg: ISourceConfig, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    remove_source(id: string, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    add_node(id: string, cfg: INodeConfig, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    remove_node(compositorId: string, address: string, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    set_property(propertyDomain: sesame.v1.common.IPropertyDomain, addr: string, prop: string, val: sesame.v1.common.IPropValue, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    add_load_playlist_command(sourceId: string, playlist: IPlaylist): sesame.v1.commands.CommandListItem;
    add_eject_playlist_command(sourceId: string): sesame.v1.commands.CommandListItem;
    add_transport_command(id: string, msg: ITransportCommand, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    update_source(id: string, cfg: ISourceConfig, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    update_source_metadata(id: string, metadata: sesame.v1.common.ITransportMetadata, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    update_source_transport(id: string, cfg: ISourceTransportConfig, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    add_output(id: string, cfg: IOutputConfig, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    update_output(id: string, cfg: IOutputConfig, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    remove_output(id: string, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    add_audio_mixer(id: string, cfg: IAudioMixerConfig, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    update_audio_mixer(id: string, cfg: IAudioMixerConfig, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    add_audio_mixer_channel(mixerId: string, cfg: IAudioMixerChannel, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    remove_audio_mixer(mixerId: string, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    remove_audio_mixer_channel(mixerId: string, channelId: string, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    animate_property(propertyDomain: sesame.v1.common.IPropertyDomain, addr: string, prop: string, before: sesame.v1.compositor.AnimationChannelEvaluationMode, after: sesame.v1.compositor.AnimationChannelEvaluationMode, keyframes: sesame.v1.compositor.IKeyFrame[], timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
}
export {};
//# sourceMappingURL=command-list.d.ts.map