import { type Peer, type PeerId, type Stream } from "@libp2p/interface";
import type { MultiaddrInput } from "@multiformats/multiaddr";
import type { CreateDecoderParams, CreateEncoderParams, CreateNodeOptions, IDecodedMessage, IDecoder, IEncoder, IFilter, ILightPush, IRelay, IStore, IWaku, IWakuEventEmitter, Libp2p } from "@waku/interfaces";
import { HealthStatus, Protocols } from "@waku/interfaces";
type ProtocolsEnabled = {
    filter?: boolean;
    lightpush?: boolean;
    store?: boolean;
};
export declare class WakuNode implements IWaku {
    libp2p: Libp2p;
    relay?: IRelay;
    store?: IStore;
    filter?: IFilter;
    lightPush?: ILightPush;
    readonly events: IWakuEventEmitter;
    private readonly networkConfig;
    private _nodeStateLock;
    private _nodeStarted;
    private readonly connectionManager;
    private readonly peerManager;
    private readonly healthIndicator;
    constructor(options: CreateNodeOptions, libp2p: Libp2p, protocolsEnabled: ProtocolsEnabled, relay?: IRelay);
    get peerId(): PeerId;
    get protocols(): string[];
    get health(): HealthStatus;
    dial(peer: PeerId | MultiaddrInput, protocols?: Protocols[]): Promise<Stream>;
    hangUp(peer: PeerId | MultiaddrInput): Promise<boolean>;
    start(): Promise<void>;
    stop(): Promise<void>;
    getConnectedPeers(): Promise<Peer[]>;
    waitForPeers(protocols?: Protocols[], timeoutMs?: number): Promise<void>;
    isStarted(): boolean;
    isConnected(): boolean;
    createDecoder(params: CreateDecoderParams): IDecoder<IDecodedMessage>;
    createEncoder(params: CreateEncoderParams): IEncoder;
    private createRoutingInfo;
}
export {};
