import { EventEmitter } from 'eventemitter3';
import { Duplex } from 'streamx';
import { default as uws } from 'uWebSockets.js';
import { Server } from './server';
export declare class WebSocket extends EventEmitter {
    namespace: Buffer;
    connection: uws.WebSocket<any>;
    static allocTopic(namespace: Buffer, topic: Buffer | string): string | Buffer;
    constructor(namespace: any, connection: any, topics?: {});
    get uws(): boolean;
    allocTopic(topic: Buffer | string): any;
    send(message: uws.RecognizedString, isBinary: boolean, compress: boolean): number | undefined;
    publish(topic: Buffer | string, message: uws.RecognizedString, isBinary: boolean, compress: boolean): boolean | undefined;
    subscribe(topic: Buffer | string): boolean | undefined;
    unsubscribe(topic: Buffer | string): boolean | undefined;
    isSubscribed(topic: Buffer | string): boolean;
    getTopics(): string[];
    close(): void;
    end(code: number, shortMessage: uws.RecognizedString): void;
    cork(cb: () => void): uws.WebSocket<any> | undefined;
    getBufferedAmount(): number;
    ping(message: uws.RecognizedString): number | undefined;
}
export declare class WebSocketStream extends Duplex {
    socket: WebSocket;
    constructor(socket: WebSocket, opts?: {
        compress?: boolean | false;
        highWaterMark?: number | 16384;
        mapReadable?: (packet: {
            data: any;
            isBinary: boolean;
        }) => any;
        byteLengthReadable?: (packet: {
            data: any;
            isBinary: boolean;
        }) => number | 1024;
        mapWritable?: (data: any) => {
            data: any;
            isBinary: boolean;
            compress: boolean;
        };
        byteLengthWritable?: (packet: {
            data: any;
            isBinary: boolean;
            compress: boolean;
        }) => number | 1024;
    });
    _open(cb: any): void;
    _close(cb: any): void;
    _onMessage(data: any, isBinary: any): void;
    _write(packet: any, cb: any): void;
}
type WSOptions = {
    closeOnBackpressureLimit?: boolean;
    compression?: number;
    idleTimeout?: number;
    maxBackpressure?: number;
    maxLifetime?: number;
    maxPayloadLength?: number;
    sendPingsAutomatically?: boolean;
};
export declare class WebSocketServer extends EventEmitter {
    constructor(options?: WSOptions);
    addServer(server: Server): void;
}
export {};
