import { SystemMessageDataType, OriginalMessageType, AppInfo } from '../../typings';
import { BatchableMethods, createProtocol } from './protocol';
export interface ClientEvents {
    voice: (voice: Uint8Array, original: OriginalMessageType) => void;
    status: (status: OriginalMessageType['status'], original: OriginalMessageType) => void;
    systemMessage: (systemMessage: SystemMessageDataType, original: OriginalMessageType) => void;
}
export declare type SystemMessage = SystemMessageDataType & {
    messageId: string;
    messageName: OriginalMessageType[];
};
export declare const createClient: (protocol: ReturnType<typeof createProtocol>, provideMeta?: (() => Promise<Partial<Pick<SystemMessageDataType, 'app_info' | 'meta'>>>) | undefined) => {
    destroy: () => void;
    createVoiceStream: (callback: ({ messageId, sendVoice, onMessage, }: Pick<BatchableMethods, "messageId" | "sendVoice"> & {
        onMessage: (cb: (message: OriginalMessageType) => void) => () => void;
    }) => Promise<void>) => Promise<void>;
    sendData: (data: Record<string, unknown>, messageName?: string) => number | Long;
    sendMeta: (sendSystemMessage: (data: {
        data: Record<string, unknown>;
        messageName?: string | undefined;
    }, last: boolean) => void) => Promise<void>;
    sendOpenAssistant: ({ isFirstSession }?: {
        isFirstSession: boolean;
    }) => Promise<SystemMessageDataType>;
    sendServerAction: (serverAction: unknown, appInfo: AppInfo, messageName?: string) => Promise<number | Long | undefined>;
    sendText: (text: string, isSsml?: boolean, shouldSendDisableDubbing?: boolean | undefined) => Promise<number | Long | undefined>;
    sendCancel: (messageId: number) => void;
    on: <K extends "status" | "voice" | "systemMessage">(event: K, cb: ClientEvents[K]) => () => void;
    waitForAnswer: (messageId: number | Long) => Promise<SystemMessageDataType>;
};
//# sourceMappingURL=client.d.ts.map