import { PeerConnection } from "bittorrent-tracker";
import { Request } from "../requests/request.js";
import { CoreEventMap, SegmentWithStream, StreamType } from "../types.js";
import { PeerConfig } from "./peer-protocol.js";
import { EventTarget } from "../utils/event-target.js";
type PeerEventHandlers = {
    onPeerClosed: (peer: Peer) => void;
    onSegmentRequested: (peer: Peer, segmentId: number, requestId: number, byteFrom?: number) => void;
    onSegmentsAnnouncement: () => void;
};
export declare class Peer {
    private readonly connection;
    private readonly eventHandlers;
    private readonly peerConfig;
    private readonly streamType;
    private readonly eventTarget;
    readonly id: string;
    private readonly peerProtocol;
    private downloadingContext?;
    private loadedSegments;
    private httpLoadingSegments;
    private downloadingErrors;
    private logger;
    private readonly onPeerClosed;
    constructor(connection: PeerConnection, eventHandlers: PeerEventHandlers, peerConfig: PeerConfig, streamType: StreamType, eventTarget: EventTarget<CoreEventMap>);
    get downloadingSegment(): SegmentWithStream | undefined;
    getSegmentStatus(segment: SegmentWithStream): "loaded" | "http-loading" | undefined;
    private onCommandReceived;
    protected onSegmentChunkReceived: (chunk: Uint8Array) => void;
    downloadSegment(segmentRequest: Request): void;
    uploadSegmentData(segment: SegmentWithStream, requestId: number, data: ArrayBuffer): Promise<void>;
    private cancelSegmentDownloading;
    sendSegmentsAnnouncementCommand(loadedSegmentsIds: number[], httpLoadingSegmentsIds: number[]): void;
    sendSegmentAbsentCommand(segmentExternalId: number, requestId: number): void;
    private sendCancelSegmentRequestCommand;
    private sendSegmentDataSendingCompletedCommand;
    private onPeerConnectionClosed;
    private onConnectionError;
    destroy: () => void;
    static getPeerIdFromConnection(connection: PeerConnection): string;
}
export {};
