@directus/api
Version:
Directus is a real-time API and App dashboard for managing SQL database content
36 lines (35 loc) • 1.9 kB
TypeScript
import type { Accountability } from '@directus/types';
import { WebSocketMessage } from '@directus/types';
import type { IncomingMessage, Server as httpServer } from 'http';
import type { RateLimiterAbstract } from 'rate-limiter-flexible';
import type internal from 'stream';
import WebSocket, { type Server } from 'ws';
import { WebSocketAuthMessage } from '../messages.js';
import type { AuthenticationState, UpgradeContext, WebSocketAuthentication, WebSocketClient } from '../types.js';
export default abstract class SocketController {
server: Server;
clients: Set<WebSocketClient>;
authentication: WebSocketAuthentication;
endpoint: string;
maxConnections: number;
private rateLimiter;
private authInterval;
constructor(httpServer: httpServer, configPrefix: string);
protected getEnvironmentConfig(configPrefix: string): {
endpoint: string;
authentication: WebSocketAuthentication;
maxConnections: number;
};
protected getRateLimiter(): RateLimiterAbstract | null;
private catchInvalidMessages;
protected handleUpgrade(request: IncomingMessage, socket: internal.Duplex, head: Buffer): Promise<void>;
protected handleTokenUpgrade({ request, socket, head, accountabilityOverrides }: UpgradeContext, token: string | null): Promise<void>;
protected handleHandshakeUpgrade({ request, socket, head, accountabilityOverrides }: UpgradeContext): Promise<void>;
createClient(ws: WebSocket, { accountability, expires_at }: AuthenticationState): WebSocketClient;
protected parseMessage(data: string): WebSocketMessage;
protected handleAuthRequest(client: WebSocketClient, message: WebSocketAuthMessage): Promise<void>;
protected checkUserRequirements(_accountability: Accountability | null): void;
setTokenExpireTimer(client: WebSocketClient): void;
checkClientTokens(): void;
terminate(): void;
}