///
import { IncomingHttpHeaders, IncomingMessage, ServerResponse } from 'http';
import { URLSearchParams } from 'url';
import { Socket } from 'net';
import { Awareness } from 'y-protocols/awareness';
import Document from './Document';
import { Hocuspocus } from './Hocuspocus';
export declare enum MessageType {
Unknown = -1,
Sync = 0,
Awareness = 1,
Auth = 2,
QueryAwareness = 3
}
/**
* State of the WebSocket connection.
* https://developer.mozilla.org/de/docs/Web/API/WebSocket/readyState
*/
export declare enum WsReadyStates {
Connecting = 0,
Open = 1,
Closing = 2,
Closed = 3
}
export interface AwarenessUpdate {
added: Array;
updated: Array;
removed: Array;
}
export interface ConnectionConfiguration {
readOnly: boolean;
requiresAuthentication: boolean;
isAuthenticated: boolean;
}
export interface Extension {
priority?: number;
onConfigure?(data: onConfigurePayload): Promise;
onListen?(data: onListenPayload): Promise;
onUpgrade?(data: onUpgradePayload): Promise;
onConnect?(data: onConnectPayload): Promise;
onAuthenticate?(data: onAuthenticatePayload): Promise;
/**
* @deprecated onCreateDocument is deprecated, use onLoadDocument instead
*/
onCreateDocument?(data: onLoadDocumentPayload): Promise;
onLoadDocument?(data: onLoadDocumentPayload): Promise;
afterLoadDocument?(data: onLoadDocumentPayload): Promise;
onChange?(data: onChangePayload): Promise;
onStoreDocument?(data: onStoreDocumentPayload): Promise;
afterStoreDocument?(data: afterStoreDocumentPayload): Promise;
onAwarenessUpdate?(data: onAwarenessUpdatePayload): Promise;
onRequest?(data: onRequestPayload): Promise;
onDisconnect?(data: onDisconnectPayload): Promise;
onDestroy?(data: onDestroyPayload): Promise;
}
export declare type Hook = 'onConfigure' | 'onListen' | 'onUpgrade' | 'onConnect' | 'onAuthenticate' |
/**
* @deprecated onCreateDocument is deprecated, use onLoadDocument instead
*/
'onCreateDocument' | 'onLoadDocument' | 'afterLoadDocument' | 'onChange' | 'onStoreDocument' | 'afterStoreDocument' | 'onAwarenessUpdate' | 'onRequest' | 'onDisconnect' | 'onDestroy';
export interface Configuration extends Extension {
/**
* A name for the instance, used for logging.
*/
name: string | null;
/**
* A list of hocuspocus extenions.
*/
extensions: Array;
/**
* The port which the server listens on.
*/
port: number | null;
/**
* Defines in which interval the server sends a ping, and closes the connection when no pong is sent back.
*/
timeout: number;
/**
* Debounces the call of the `onStoreDocument` hook for the given amount of time in ms.
* Otherwise every single update would be persisted.
*/
debounce: number;
/**
* Makes sure to call `onStoreDocument` at least in the given amount of time (ms).
*/
maxDebounce: number;
/**
* By default, the servers show a start screen. If passed false, the server will start quietly.
*/
quiet: boolean;
/**
* Function which returns the (customized) document name based on the request
*/
getDocumentName?(data: {
documentName: string;
request: IncomingMessage;
requestParameters: URLSearchParams;
}): string | Promise;
}
export interface onAuthenticatePayload {
documentName: string;
instance: Hocuspocus;
requestHeaders: IncomingHttpHeaders;
requestParameters: URLSearchParams;
socketId: string;
token: string;
connection: ConnectionConfiguration;
}
export interface onConnectPayload {
documentName: string;
instance: Hocuspocus;
request: IncomingMessage;
requestHeaders: IncomingHttpHeaders;
requestParameters: URLSearchParams;
socketId: string;
connection: ConnectionConfiguration;
}
export interface onLoadDocumentPayload {
context: any;
document: Document;
documentName: string;
instance: Hocuspocus;
requestHeaders: IncomingHttpHeaders;
requestParameters: URLSearchParams;
socketId: string;
connection: ConnectionConfiguration;
}
export interface afterLoadDocumentPayload {
context: any;
document: Document;
documentName: string;
instance: Hocuspocus;
requestHeaders: IncomingHttpHeaders;
requestParameters: URLSearchParams;
socketId: string;
connection: ConnectionConfiguration;
}
export interface onChangePayload {
clientsCount: number;
context: any;
document: Document;
documentName: string;
instance: Hocuspocus;
requestHeaders: IncomingHttpHeaders;
requestParameters: URLSearchParams;
update: Uint8Array;
socketId: string;
}
export interface onStoreDocumentPayload {
clientsCount: number;
context: any;
document: Document;
documentName: string;
instance: Hocuspocus;
requestHeaders: IncomingHttpHeaders;
requestParameters: URLSearchParams;
socketId: string;
}
export interface afterStoreDocumentPayload extends onStoreDocumentPayload {
}
export interface onAwarenessUpdatePayload {
clientsCount: number;
context: any;
document: Document;
documentName: string;
instance: Hocuspocus;
requestHeaders: IncomingHttpHeaders;
requestParameters: URLSearchParams;
update: Uint8Array;
socketId: string;
added: number[];
updated: number[];
removed: number[];
awareness: Awareness;
states: any[];
}
export interface storePayload extends onStoreDocumentPayload {
state: Buffer;
}
export interface onDisconnectPayload {
clientsCount: number;
context: any;
document: Document;
documentName: string;
instance: Hocuspocus;
requestHeaders: IncomingHttpHeaders;
requestParameters: URLSearchParams;
socketId: string;
}
export interface onRequestPayload {
request: IncomingMessage;
response: ServerResponse;
instance: Hocuspocus;
}
export interface onUpgradePayload {
head: any;
request: IncomingMessage;
socket: Socket;
instance: Hocuspocus;
}
export interface onListenPayload {
port: number;
}
export interface onDestroyPayload {
instance: Hocuspocus;
}
export interface onConfigurePayload {
configuration: Configuration;
version: string;
yjsVersion: string;
instance: Hocuspocus;
}