@directus/api
Version:
Directus is a real-time API and App dashboard for managing SQL database content
44 lines (43 loc) • 1.77 kB
TypeScript
import type { Bus } from '@directus/memory';
import { type WebSocketClient } from '@directus/types';
import { type BroadcastMessage, type ClientID, type ServerError, type ServerMessage } from '@directus/types/collab';
type Instance = {
clients: ClientID[];
rooms: string[];
};
type Registry = Record<string, Instance>;
type RegistrySnapshot = {
inactive: Instance;
active: ClientID[];
};
type RoomMessage = Extract<BroadcastMessage, {
type: 'room';
}>;
export type RoomListener = (message: RoomMessage) => void;
export declare class Messenger {
uid: `${string}-${string}-${string}-${string}-${string}`;
store: <T>(callback: (store: import("./store.js").RedisStore<{
instances: Registry;
}>) => Promise<T>) => Promise<T>;
clients: Record<ClientID, WebSocketClient>;
orders: Record<ClientID, number>;
messenger: Bus;
roomListeners: Record<string, RoomListener>;
constructor();
hasClient(client: ClientID): boolean;
setRoomListener(room: string, callback: RoomListener): void;
removeRoomListener(room: string): void;
addClient(client: WebSocketClient): void;
removeClient(uid: ClientID): void;
registerRoom(uid: string): Promise<void>;
unregisterRoom(uid: string): Promise<void>;
getLocalClients(): Promise<ClientID[]>;
getGlobalClients(): Promise<ClientID[]>;
pruneDeadInstances(): Promise<RegistrySnapshot>;
sendRoom(room: string, message: Omit<RoomMessage, 'type' | 'room'>): void;
sendClient(client: ClientID, message: Omit<ServerMessage, 'order'>): void;
terminateClient(client: ClientID): void;
sendError(client: ClientID, error: ServerError): void;
handleError(client: ClientID, error: unknown, action?: ServerError['trigger']): void;
}
export {};