import { Doc } from "yjs";
import { Awareness } from "y-protocols/awareness";
type Listener<T> = (message: T) => void;
export type Persistence<T extends Object> = {
    onUpdate?: (doc: WSSharedDoc<T>, update: Uint8Array) => Promise<void>;
    onCloseAll?: (doc: WSSharedDoc<T>) => Promise<void>;
};
export declare const MESSAGE_TYPE: {
    UPDATE: number;
    AWARENESS: number;
};
export declare class WSSharedDoc<T extends Object> extends Doc {
    awareness: Awareness;
    private conns;
    private persistence;
    constructor(gcEnabled?: boolean);
    /**
     *
     * @description Broadcasts the awareness update to all listeners
     */
    private onAwarenessChanged;
    /**
     *
     * @description Broadcasts the update to all listeners
     */
    private onUpdated;
    /**
     * @param conn Object
     * @param message Unit8Array
     * @description Broadcasts the message to all listeners
     */
    private send;
    /**
     *
     * @param message Unit8Array
     * @description Broadcasts the message to all listeners
     */
    private broadcast;
    /**
     *
     * @param message
     *
     * @returns message type. null if error.
     */
    message(conn: T, message: Uint8Array): number | null;
    /**
     *
     * @param doc Object
     * @description Applies the update to the document
     */
    applyUpdate(doc: Doc): void;
    /**
     * @param conn Object
     * @param sendMessage Unit8Array => void
     */
    setupConn(conn: T, sendMessage: Listener<Uint8Array>): void;
    /**
     *
     * @param conn Object
     */
    closeConn(conn: T): void;
    get connectionSize(): number;
    setPersistence(provider: Persistence<T>): void;
}
export {};
