import { FfiEvent, PartialMessage, FfiRequest } from '@livekit/rtc-ffi-bindings';
export { FfiEvent, FfiHandle, FfiRequest, FfiResponse, livekitDispose as dispose } from '@livekit/rtc-ffi-bindings';
import { TypedEventEmitter } from '@livekit/typed-emitter';

type FfiClientCallbacks = {
    ffi_event: (event: FfiEvent) => void;
};
declare enum FfiClientEvent {
    FfiEvent = "ffi_event"
}
declare global {
    var _ffiClientInstance: FfiClient | undefined;
}
declare const FfiClient_base: new () => TypedEventEmitter<FfiClientCallbacks>;
declare class FfiClient extends FfiClient_base {
    /** @internal */
    static get instance(): FfiClient;
    private _nextRequestAsyncId;
    constructor();
    request<T>(req: PartialMessage<FfiRequest>): T;
    copyBuffer(ptr: bigint, len: number): Uint8Array;
    retrievePtr(data: Uint8Array): bigint;
    getNextRequestAsyncId(): bigint;
    waitFor<T>(predicate: (ev: FfiEvent) => boolean, options?: {
        signal?: AbortSignal;
    }): Promise<T>;
}

export { FfiClient, type FfiClientCallbacks, FfiClientEvent };
