///
import { EventEmitter } from 'events';
import { BroadcastMessage, ControlMessage, ProxyConnectionRequest, ProxyConnectionResponse, ProxyDirection, StreamMessage, StreamPartID, UnsubscribeRequest } from '@streamr/protocol';
import { IWebRtcEndpoint } from '../connection/webrtc/IWebRtcEndpoint';
import { PeerInfo } from '../connection/PeerInfo';
import { Rtts, NodeId } from "../identifiers";
export declare enum Event {
NODE_CONNECTED = "streamr:node-node:node-connected",
NODE_DISCONNECTED = "streamr:node-node:node-disconnected",
DATA_RECEIVED = "streamr:node-node:stream-data",
LOW_BACK_PRESSURE = "streamr:node-node:low-back-pressure",
HIGH_BACK_PRESSURE = "streamr:node-node:high-back-pressure",
PROXY_CONNECTION_REQUEST_RECEIVED = "node-node:publish-only-stream-request-received",
PROXY_CONNECTION_RESPONSE_RECEIVED = "node-node:publish-only-stream-response-received",
LEAVE_REQUEST_RECEIVED = "node-node:leave-request-received"
}
export interface NodeToNode {
on(event: Event.NODE_CONNECTED, listener: (nodeId: NodeId) => void): this;
on(event: Event.NODE_DISCONNECTED, listener: (nodeId: NodeId) => void): this;
on(event: Event.DATA_RECEIVED, listener: (message: BroadcastMessage, nodeId: NodeId) => void): this;
on(event: Event.LOW_BACK_PRESSURE, listener: (nodeId: NodeId) => void): this;
on(event: Event.HIGH_BACK_PRESSURE, listener: (nodeId: NodeId) => void): this;
on(event: Event.PROXY_CONNECTION_REQUEST_RECEIVED, listener: (message: ProxyConnectionRequest, nodeId: NodeId) => void): this;
on(event: Event.PROXY_CONNECTION_RESPONSE_RECEIVED, listener: (message: ProxyConnectionResponse, nodeId: NodeId) => void): this;
on(event: Event.LEAVE_REQUEST_RECEIVED, listener: (message: UnsubscribeRequest, nodeId: NodeId) => void): this;
}
export declare class NodeToNode extends EventEmitter {
private readonly endpoint;
constructor(endpoint: IWebRtcEndpoint);
connectToNode(receiverNodeId: NodeId, trackerId: string, trackerInstructed?: boolean): Promise;
sendData(receiverNodeId: NodeId, streamMessage: StreamMessage): Promise;
send(receiverNodeId: NodeId, message: T & ControlMessage): Promise;
disconnectFromNode(receiverNodeId: NodeId, reason: string): void;
/**
* @deprecated
*/
getAddress(): string;
stop(): void;
onPeerConnected(peerInfo: PeerInfo): void;
onPeerDisconnected(peerInfo: PeerInfo): void;
onMessageReceived(peerInfo: PeerInfo, rawMessage: string): void;
onLowBackPressure(peerInfo: PeerInfo): void;
onHighBackPressure(peerInfo: PeerInfo): void;
getRtts(): Readonly;
getNegotiatedProtocolVersionsOnNode(nodeId: NodeId): [number, number];
requestProxyConnection(nodeId: NodeId, streamPartId: StreamPartID, direction: ProxyDirection, userId: string): Promise;
leaveStreamOnNode(nodeId: NodeId, streamPartId: StreamPartID): Promise;
respondToProxyConnectionRequest(nodeId: NodeId, streamPartId: StreamPartID, direction: ProxyDirection, accepted: boolean): Promise;
getAllConnectionNodeIds(): NodeId[];
getDiagnosticInfo(): Record;
}