import WebSocket from 'ws';
import type { IncomingHttpHeaders } from 'http';
type Operation = {
    started: boolean;
    options: {
        query: string;
        variables: Record<string, unknown>;
        operationName: string | undefined | null;
    };
    handler: (data: unknown) => Promise<void>;
    extensions?: {
        type: string;
        payload: unknown;
    }[];
};
export declare class SubscriptionClient {
    subscriptionQueryMap: Record<string, string>;
    socket: WebSocket | null;
    protocols: string[];
    headers: IncomingHttpHeaders;
    uri: string;
    operationId: number;
    ready: boolean;
    operations: Map<string, Operation>;
    operationsCount: Record<string | number, number>;
    tryReconnect: boolean;
    maxReconnectAttempts: number;
    serviceName?: string;
    reconnectAttempts: number;
    connectionCallback?: Function;
    failedConnectionCallback?: Function;
    failedReconnectCallback?: Function;
    connectionInitPayload?: unknown;
    closedByUser?: boolean;
    reconnecting?: boolean;
    reconnectTimeoutId?: NodeJS.Timeout;
    constructor(uri: string, config: {
        protocols?: [];
        reconnect?: boolean;
        maxReconnectAttempts?: number;
        serviceName?: string;
        connectionCallback?: Function;
        failedConnectionCallback?: Function;
        failedReconnectCallback?: Function;
        connectionInitPayload?: object;
        headers?: IncomingHttpHeaders;
    });
    connect(): void;
    close(tryReconnect?: boolean, closedByUser?: boolean): void;
    getReconnectDelay(): number;
    reconnect(): any;
    unsubscribe(operationId: string | number, forceUnsubscribe?: boolean): void;
    unsubscribeAll(): void;
    sendMessage(operationId: number | string | null, type: string, payload?: unknown, extensions?: unknown): Promise<void>;
    handleMessage(message: string): Promise<void>;
    startOperation(operationId: string): Promise<void>;
    createSubscription(query: string, variables: Record<string, unknown>, publish: (args: {
        topic: string;
        payload: any;
    }) => void | Promise<void>, operationName?: string | null, connectionInit?: Record<string, any>): Promise<void>;
}
export {};
