import DevelopmentReloader from "./development-reloader.js"; import InProcessHandler from "./worker-handler/in-process.js"; import Logger from "../logger.js"; import ServerClient from "./server-client.js"; import WorkerHandler from "./worker-handler/index.js"; export type DevelopmentReloaderLike = { start: () => Promise; stop: () => Promise; }; export type WorkerHandlerFactory = (args: { configuration: import("../configuration.js").default; onWebsocketSessionOwned: (args: { sessionId: string; workerHandler: WorkerHandler; }) => void; onWebsocketSessionReleased: (args: { sessionId: string; workerHandler: WorkerHandler; }) => void; onWorkerStopped: (args: { workerHandler: WorkerHandler; }) => void; workerCount: number; }) => (WorkerHandler | InProcessHandler); export default class VelociousHttpServer { configuration: import("../configuration.js").default; developmentReloaderFactory: ((args: { configuration: import("../configuration.js").default; onReload: (args: { changedPath: string; }) => Promise; }) => { start: () => Promise; stop: () => Promise; }) | undefined; inProcess: boolean; logger: Logger; host: string; port: number; workers: number; effectiveWorkers: number; _stopping: boolean | undefined; _reloadWorkersForDevelopmentQueued: boolean | undefined; _reloadingWorkersForDevelopment: boolean | undefined; clientCount: number; _starting: boolean; /** * Narrows the runtime value to the documented type. * @type {DevelopmentReloader | DevelopmentReloaderLike | undefined} */ developmentReloader: DevelopmentReloader | DevelopmentReloaderLike | undefined; /** * Narrows the runtime value to the documented type. * @type {import("net").Server | undefined} */ netServer: import("net").Server | undefined; /** * Narrows the runtime value to the documented type. * @type {WorkerHandlerFactory | undefined} */ workerHandlerFactory: WorkerHandlerFactory | undefined; /** * Clients. * @type {Record} */ clients: Record; /** * Active sockets. * @type {Set} */ _activeSockets: Set; events: import("eventemitter3").EventEmitter; workerCount: number; /** * Worker handlers. * @type {Array} */ workerHandlers: Array; nextWorkerHandlerIndex: number; /** Worker ownership for live or grace-paused resumable WebSocket sessions. */ websocketSessionOwners: Map; /** * Runs constructor. * @param {object} args - Options object. * @param {import("../configuration.js").default} args.configuration - Configuration instance. * @param {string} [args.host] - Host. * @param {boolean} [args.inProcess] - Run HTTP handlers in the main thread instead of worker threads. * @param {number} [args.port] - Port. * @param {number} [args.maxWorkers] - Max workers. * @param {number} [args.workers] - Worker handlers to start. * @param {() => number} [args.availableParallelism] - CPU availability owner seam. * @param {(args: {configuration: import("../configuration.js").default, onReload: (args: {changedPath: string}) => Promise}) => {start: () => Promise, stop: () => Promise}} [args.developmentReloaderFactory] - Development reloader factory. * @param {WorkerHandlerFactory} [args.workerHandlerFactory] - Worker handler factory. */ constructor({ availableParallelism, configuration, developmentReloaderFactory, host, inProcess, maxWorkers, port, workerHandlerFactory, workers }: { configuration: import("../configuration.js").default; host?: string; inProcess?: boolean; port?: number; maxWorkers?: number; workers?: number; availableParallelism?: () => number; developmentReloaderFactory?: (args: { configuration: import("../configuration.js").default; onReload: (args: { changedPath: string; }) => Promise; }) => { start: () => Promise; stop: () => Promise; }; workerHandlerFactory?: WorkerHandlerFactory; }); /** * Runs start. * @returns {Promise} - Resolves when complete. */ start(): Promise; /** * Runs capture startup state. * @returns {{developmentReloader: DevelopmentReloader | DevelopmentReloaderLike | undefined, netServer: import("net").Server | undefined, workerHandlers: Array}} - Startup state. */ _captureStartupState(): { developmentReloader: DevelopmentReloader | DevelopmentReloaderLike | undefined; netServer: import("net").Server | undefined; workerHandlers: Array; }; /** * Runs stop startup resources. * @param {ReturnType} startupState - State captured before startup. * @returns {Promise} - Resolves when cleanup is complete. */ _stopStartupResources(startupState: ReturnType): Promise; /** * Runs net server listen. * @returns {Promise} - Resolves when complete. */ _netServerListen(): Promise; /** * Runs ensure workers. * @returns {Promise} - Resolves when complete. */ _ensureWorkers(): Promise; /** * Runs is active. * @returns {boolean} - Whether active. */ isActive(): boolean; /** * Runs get debug snapshot. * @returns {Promise>>} - HTTP server worker diagnostics. */ getDebugSnapshot(): Promise>>; /** * Runs worker debug snapshot. * @param {WorkerHandler | InProcessHandler} workerHandler - Worker handler to inspect. * @returns {Promise>>} Worker debug snapshot. */ workerDebugSnapshot(workerHandler: WorkerHandler | InProcessHandler): Promise>>; /** * Runs in process worker debug snapshot. * @param {InProcessHandler} workerHandler - In-process worker handler to inspect. * @returns {Record>} Worker debug snapshot. */ inProcessWorkerDebugSnapshot(workerHandler: InProcessHandler): Record>; /** * Runs stop clients. * @returns {Promise} - Resolves when complete. */ stopClients(): Promise; /** * Runs stop server. * @param {import("net").Server | undefined} [netServer] - Server to stop. * @returns {Promise} - Resolves when complete. */ stopServer(netServer?: import("net").Server | undefined): Promise; /** * Runs stop. * @returns {Promise} - Resolves when complete. */ stop(): Promise; /** * On close. * @returns {void} - No return value. */ onClose: () => void; /** * On server error. * @param {Error} error - Server socket error. * @returns {void} - No return value. */ onServerError: (error: Error) => void; /** * On connection. * @param {import("net").Socket} socket - Socket instance. * @returns {void} - No return value. */ onConnection: (socket: import("net").Socket) => void; /** * Buffers only the bounded initial request data needed to recognize a * WebSocket resume routing hint, then replays it to the selected worker. * @param {ServerClient} client - Unassigned socket client. * @returns {void} */ routeClientAfterInitialRoutingData(client: ServerClient): void; /** * Checks whether the buffered initial HTTP headers are complete. * @param {Buffer} initialRequest - Buffered initial request bytes. * @returns {boolean} - Whether a header terminator is present. */ initialRequestHeadersComplete(initialRequest: Buffer): boolean; /** * Checks whether a possible resumable WebSocket request still needs headers. * Ordinary and malformed requests can reach the existing request parser as * soon as their first line is complete. * @param {Buffer} initialRequest - Buffered initial request bytes. * @returns {boolean} - Whether more routing data is required. */ initialRequestNeedsMoreRoutingData(initialRequest: Buffer): boolean; /** * Assigns a buffered client and replays the exact bytes into its worker. * @param {ServerClient} client - Client awaiting assignment. * @param {Buffer} initialRequest - Initial request bytes. * @returns {void} */ assignClientToWorker(client: ServerClient, initialRequest: Buffer): void; /** * Selects the owner of a resumable WebSocket session or the next ordinary worker. * @param {Buffer} initialRequest - Initial HTTP request headers. * @returns {WorkerHandler | InProcessHandler} - Selected worker. */ workerHandlerForInitialRequest(initialRequest: Buffer): WorkerHandler | InProcessHandler; /** * Reads the resumable WebSocket session routing hint from an upgrade request. * @param {Buffer} initialRequest - Initial HTTP request headers. * @returns {string | undefined} - Session identity, if present on a WebSocket upgrade. */ websocketResumeSessionId(initialRequest: Buffer): string | undefined; /** * Records the live worker owner for a resumable session. * @param {{sessionId: string, workerHandler: WorkerHandler | InProcessHandler}} args - Ownership claim. * @returns {void} */ claimWebsocketSession({ sessionId, workerHandler }: { sessionId: string; workerHandler: WorkerHandler | InProcessHandler; }): void; /** * Releases a session only when the releasing worker still owns it. * @param {{sessionId: string, workerHandler: WorkerHandler | InProcessHandler}} args - Ownership release. * @returns {void} */ releaseWebsocketSession({ sessionId, workerHandler }: { sessionId: string; workerHandler: WorkerHandler | InProcessHandler; }): void; /** * Releases every session owned by a worker leaving service. * @param {WorkerHandler | InProcessHandler} workerHandler - Worker leaving service. * @returns {void} */ releaseWebsocketSessionsForWorker(workerHandler: WorkerHandler | InProcessHandler): void; /** * On client close. * @param {ServerClient} client - Client instance. * @returns {void} - No return value. */ onClientClose: (client: ServerClient) => void; /** * Runs spawn worker. * @returns {Promise} - Resolves when complete. */ spawnWorker(): Promise; /** * Runs build worker handlers. * @returns {Promise>} - Started worker handlers. */ _buildWorkerHandlers(): Promise>; /** * Runs build worker handler. * @returns {Promise} - Started worker handler. */ _buildWorkerHandler(): Promise; /** * Runs worker handler to use. * @returns {WorkerHandler | InProcessHandler} - The worker handler to use. */ workerHandlerToUse(): WorkerHandler | InProcessHandler; /** * Runs next round robin worker handler. * @returns {WorkerHandler | InProcessHandler} - The next round-robin worker handler. */ _nextRoundRobinWorkerHandler(): WorkerHandler | InProcessHandler; /** * Runs should use development hot reload. * @returns {boolean} - Whether development worker hot reload should run. */ shouldUseDevelopmentHotReload(): boolean; /** * Runs start development reloader. * @returns {Promise} - Resolves when watcher setup finishes. */ _startDevelopmentReloader(): Promise; /** * Runs reload workers for development. * @returns {Promise} - Resolves when workers have been refreshed. */ reloadWorkersForDevelopment(): Promise; } //# sourceMappingURL=index.d.ts.map