import { OnGatewayInit, OnGatewayConnection, OnGatewayDisconnect } from '@nestjs/websockets';
import { Server, Socket } from 'socket.io';
import { OnModuleDestroy } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { AuthService } from '../auth/auth.service';
import { AuditService } from '../audit/audit.service';
import type { WSClientMessage, WSSubscribedResponse, WSUnsubscribedResponse, WSErrorResponse, WSPongResponse } from './dto/ws-messages.dto';
import type { DeliveryStatus } from '../../engine/interfaces/whatsapp-engine.interface';
export declare function isSessionSubscriptionAllowed(allowedSessions: string[] | null | undefined, sessionId: string): boolean;
export type ApiKeyEvictionReason = 'revoked' | 'deleted' | 'authorization_changed' | 'expired';
export declare class EventsGateway implements OnGatewayInit, OnGatewayConnection, OnGatewayDisconnect, OnModuleDestroy {
    private readonly authService;
    private readonly auditService;
    private readonly configService;
    server: Server;
    private logger;
    private readonly socketsByKeyId;
    private expirySweepTimer?;
    private readonly rateLimits;
    private readonly frameLimiter;
    private readonly handshakeLimiter;
    private readonly violations;
    private static readonly VIOLATION_AUDIT_WINDOW_MS;
    private static readonly MAX_VIOLATION_KEYS;
    constructor(authService: AuthService, auditService: AuditService, configService: ConfigService);
    afterInit(): void;
    onModuleDestroy(): void;
    private sweepExpiredApiKeys;
    private resolveClientIp;
    private trackSocket;
    private untrackSocket;
    evictApiKey(keyId: string, reason?: ApiKeyEvictionReason): void;
    handleConnection(client: Socket): Promise<void>;
    handleDisconnect(client: Socket): void;
    handleMessage(client: Socket, message: WSClientMessage): WSUnsubscribedResponse | WSErrorResponse | WSPongResponse | Promise<WSSubscribedResponse | WSErrorResponse>;
    private handleSubscribe;
    private handleUnsubscribe;
    private handlePing;
    private createError;
    private noteRateLimitViolation;
    private emitToRooms;
    emitSessionStatus(sessionId: string, status: string, data?: Record<string, unknown>): void;
    emitSessionAuthenticated(sessionId: string, data: {
        phone: string;
        pushName: string;
    }): void;
    emitSessionDisconnected(sessionId: string, data: {
        reason: string;
    }): void;
    emitSessionRestriction(sessionId: string, data: Record<string, unknown>): void;
    emitCallAccepted(sessionId: string, data: Record<string, unknown>): void;
    emitCallRejected(sessionId: string, data: Record<string, unknown>): void;
    emitCallMissed(sessionId: string, data: Record<string, unknown>): void;
    emitPresenceUpdate(sessionId: string, data: Record<string, unknown>): void;
    emitQRCode(sessionId: string, qrCode: string): void;
    private messageMediaInlineMaxBytes;
    emitMessage(sessionId: string, message: Record<string, unknown>): void;
    emitMessageSent(sessionId: string, message: Record<string, unknown>): void;
    private shedMessageMedia;
    emitMessageAck(sessionId: string, data: {
        id: string;
        messageId: string;
        status: DeliveryStatus;
        ack: number;
    }): void;
    emitMessageRevoked(sessionId: string, message: Record<string, unknown>): void;
    emitMessageReaction(sessionId: string, data: Record<string, unknown>): void;
    emitMessageEdited(sessionId: string, data: Record<string, unknown>): void;
    emitGroupJoin(sessionId: string, data: Record<string, unknown>): void;
    emitGroupLeave(sessionId: string, data: Record<string, unknown>): void;
    emitGroupUpdate(sessionId: string, data: Record<string, unknown>): void;
    emitGroupJoinRequest(sessionId: string, data: Record<string, unknown>): void;
    emitCallReceived(sessionId: string, data: Record<string, unknown>): void;
    emitStatusReceived(sessionId: string, data: Record<string, unknown>): void;
}
