import EventEmitter from 'node:events'; import type { IncomingMessage } from 'node:http'; import { type CancelablePromise } from 'p-event'; import { type CommandResponseFrame, type EventFrame, type ServerSession, WSServer } from './server.js'; export declare class AppSession { session: ServerSession; constructor(session: ServerSession); enableEncryption(): Promise; isEncrypted(): boolean; on(eventName: 'Disconnect', listener: () => void): this; on(eventName: string, listener: (frame: EventFrame) => void): this; once(eventName: 'Disconnect', listener: () => void): this; once(eventName: string, listener: (frame: EventFrame) => void): this; off(eventName: 'Disconnect', listener: () => void): this; off(eventName: string, listener: (this: this, frame: EventFrame) => void): this; addListener(eventName: 'Disconnect', listener: () => void): this; addListener(eventName: string, listener: (frame: EventFrame) => void): this; removeListener(eventName: 'Disconnect', listener: () => void): this; removeListener(eventName: string, listener: (this: this, frame: EventFrame) => void): this; waitForEvent(eventName: string, timeout?: number, filter?: (frame: EventFrame) => boolean): CancelablePromise>; command(commandLine: string | string[], timeout?: number): CancelablePromise; commandLegacy(commandName: string, overload: string, input: Record, timeout?: number): CancelablePromise; disconnect(force?: boolean, timeout?: number): CancelablePromise; } export interface WSAppEvents { session: [connection: AppSessionConnection]; } export declare class WSApp extends EventEmitter { server: WSServer; protected sessions: Set; constructor(port: number, handleSession?: (connection: AppSessionConnection) => void); forEachSession(f: (session: AppSession) => void): Promise; mapSession(f: (session: AppSession) => R): Promise[]>; waitForSession(timeout?: number): CancelablePromise; close(): void; } export interface AppSessionConnection { app: WSApp; session: AppSession; request: IncomingMessage; }