/// <reference types="node" resolution-mode="require"/>
import { ActionRequest } from "../appsensor-websocket.js";
import { IValidateInitialize } from "@appsensorlike/appsensorlike/core/core.js";
import { HttpS2Server, HttpS2ServerConfig } from "@appsensorlike/appsensorlike/http/HttpS2Server.js";
import { IncomingMessage } from "http";
import WebSocket, { PerMessageDeflateOptions, WebSocketServer } from "ws";
declare class WebSocketServerConfig extends HttpS2ServerConfig implements IValidateInitialize {
    private static DEFAULT_PORT;
    websocketServer?: {
        path?: string | undefined;
        clientTracking?: boolean | undefined;
        perMessageDeflate?: boolean | PerMessageDeflateOptions | undefined;
        maxPayload?: number | undefined;
        skipUTF8Validation?: boolean | undefined;
    };
    clientApplicationIdentificationHeaderName?: string;
    checkValidInitialize(): void;
}
interface WebSocketAdditionalProperties {
    isAlive?: boolean;
    clientApplication?: string;
    remoteAddress?: string;
    uuid?: string;
}
type WebSocketExt = WebSocket.WebSocket & WebSocketAdditionalProperties;
declare class AppSensorWebSocketServer extends HttpS2Server {
    protected static ACCESS_DENIED_CLOSE_CODE: number;
    protected config: WebSocketServerConfig;
    protected websocketServer: WebSocketServer | null;
    protected websocketServerOptions: WebSocket.ServerOptions;
    constructor(config: WebSocketServerConfig, handleProtocols?: (protocols: Set<string>, request: IncomingMessage) => string | false);
    protected getConfiguration(): HttpS2ServerConfig;
    protected attachToServer(): Promise<void>;
    protected isConnectionAllowedWrapper(me: AppSensorWebSocketServer): (ws: WebSocketExt) => boolean;
    protected isConnectionAllowed(ws: WebSocketExt): boolean;
    protected isActionAuthorized(ws: WebSocketExt, request: ActionRequest): boolean;
    private ping;
    protected onMessageWrapper(me: AppSensorWebSocketServer): (this: WebSocketExt, data: WebSocket.RawData, isBinary: boolean) => void;
    protected onClientRequest(ws: WebSocketExt, request: ActionRequest): void;
    closeServer(): Promise<void>;
    protected broadcast(actionName: string, result: number | Object | null | string, resultElementClass: string | null): void;
    protected static getParameter(request: ActionRequest, paramName: string): string | Object | undefined;
    protected static reportMissingParameter(ws: WebSocket, request: ActionRequest, paramName: string): void;
    protected static reportError(ws: WebSocket, request: ActionRequest, error: any): void;
    protected static reportAccessDenied(ws: WebSocket): void;
    protected static reportUnAuthorizedAction(ws: WebSocket, request: ActionRequest): void;
    protected static sendResult(ws: WebSocket, request: ActionRequest, result: number | Object | null | string, resultElementClass: string | null): void;
}
export { AppSensorWebSocketServer, WebSocketServerConfig, WebSocketExt };
