import type { Encoder } from 'lib0/encoding';
import type { Event, MessageEvent } from 'ws';
import type { Awareness } from 'y-protocols/awareness';
import type * as Y from 'yjs';
import type { CloseEvent } from '@hocuspocus/common';
import type { IncomingMessage } from './IncomingMessage.ts';
import type { OutgoingMessage } from './OutgoingMessage.ts';
import type { AuthenticationMessage } from './OutgoingMessages/AuthenticationMessage.ts';
import type { AwarenessMessage } from './OutgoingMessages/AwarenessMessage.ts';
import type { QueryAwarenessMessage } from './OutgoingMessages/QueryAwarenessMessage.ts';
import type { SyncStepOneMessage } from './OutgoingMessages/SyncStepOneMessage.ts';
import type { SyncStepTwoMessage } from './OutgoingMessages/SyncStepTwoMessage.ts';
import type { UpdateMessage } from './OutgoingMessages/UpdateMessage.ts';
export declare enum MessageType {
    Sync = 0,
    Awareness = 1,
    Auth = 2,
    QueryAwareness = 3,
    Stateless = 5,
    CLOSE = 7,
    SyncStatus = 8
}
export declare enum WebSocketStatus {
    Connecting = "connecting",
    Connected = "connected",
    Disconnected = "disconnected"
}
export interface OutgoingMessageInterface {
    encoder: Encoder;
    type?: MessageType;
}
export interface OutgoingMessageArguments {
    documentName: string;
    token: string;
    document: Y.Doc;
    awareness: Awareness;
    clients: number[];
    states: Map<number, {
        [key: string]: any;
    }>;
    update: any;
    payload: string;
    encoder: Encoder;
}
export interface Constructable<T> {
    new (...args: any): T;
}
export type ConstructableOutgoingMessage = Constructable<AuthenticationMessage> | Constructable<AwarenessMessage> | Constructable<QueryAwarenessMessage> | Constructable<SyncStepOneMessage> | Constructable<SyncStepTwoMessage> | Constructable<UpdateMessage>;
export type onAuthenticationFailedParameters = {
    reason: string;
};
export type onAuthenticatedParameters = {
    scope: 'read-write' | 'readonly';
};
export type onOpenParameters = {
    event: Event;
};
export type onMessageParameters = {
    event: MessageEvent;
    message: IncomingMessage;
};
export type onOutgoingMessageParameters = {
    message: OutgoingMessage;
};
export type onStatusParameters = {
    status: WebSocketStatus;
};
export type onSyncedParameters = {
    state: boolean;
};
export type onUnsyncedChangesParameters = {
    number: number;
};
export type onDisconnectParameters = {
    event: CloseEvent;
};
export type onCloseParameters = {
    event: CloseEvent;
};
export type onAwarenessUpdateParameters = {
    states: StatesArray;
};
export type onAwarenessChangeParameters = {
    states: StatesArray;
};
export type onStatelessParameters = {
    payload: string;
};
export type StatesArray = {
    clientId: number;
    [key: string | number]: any;
}[];
