import { TypedEventEmitter } from 'main-event';
import type { PubSubRPC } from './floodsub.ts';
import type { PeerStreamsEvents } from './index.ts';
import type { Stream, PeerId } from '@libp2p/interface';
import type { ProtobufStreamOpts } from '@libp2p/utils';
import type { DecoderOptions as LpDecoderOptions } from 'it-length-prefixed';
export interface PeerStreamInit {
    peerId: PeerId;
    stream: Stream;
}
export interface DecoderOptions extends LpDecoderOptions {
}
/**
 * Thin wrapper around a peer's inbound / outbound pubsub streams
 */
export declare class PeerStreams extends TypedEventEmitter<PeerStreamsEvents> {
    readonly peerId: PeerId;
    /**
     * An AbortController for controlled shutdown of the inbound stream
     */
    private readonly shutDownController;
    private inboundPb?;
    private outboundPb?;
    constructor(peerId: PeerId);
    attachInboundStream(stream: Stream, streamOpts?: Partial<ProtobufStreamOpts>): void;
    attachOutboundStream(stream: Stream, streamOpts?: Partial<ProtobufStreamOpts>): void;
    /**
     * Send a message to this peer
     */
    write(message: PubSubRPC): void;
    /**
     * Closes the open connection to peer
     */
    close(): void;
}
//# sourceMappingURL=peer-streams.d.ts.map