import { Event } from '@skyway-sdk/common';
import type { SkyWayContext } from '../../../../context';
import type { AnalyticsSession } from '../../../../external/analytics';
import type { IceManager } from '../../../../external/ice';
import type { SignalingSession } from '../../../../external/signaling';
import type { LocalPersonImpl } from '../../../../member/localPerson';
import type { RemoteMember } from '../../../../member/remoteMember';
import type { Publication, PublicationImpl } from '../../../../publication';
import type { Subscription, SubscriptionImpl } from '../../../../subscription';
import type { SkyWayConnection } from '../../../interface/connection';
import { Receiver } from './receiver';
import { Sender } from './sender';
/**@internal */
export declare class P2PConnection implements SkyWayConnection {
    private readonly _iceManager;
    private readonly _signaling;
    private readonly _analytics;
    private readonly _context;
    readonly channelId: string;
    readonly localPerson: LocalPersonImpl;
    readonly remoteMember: RemoteMember;
    readonly id: string;
    readonly type = "p2p";
    readonly onDisconnect: Event<void>;
    readonly onClose: Event<void>;
    closed: boolean;
    disconnected: boolean;
    private _log;
    private _pubsubQueue;
    private sendSubscriptionStatsReportTimers;
    private _waitingSendSubscriptionStatsReportsFromPublish;
    private _waitingSendSubscriptionStatsReportsFromSubscribe;
    readonly sender: Sender;
    readonly receiver: Receiver;
    /**@internal */
    constructor(_iceManager: IceManager, _signaling: SignalingSession, _analytics: AnalyticsSession | undefined, _context: SkyWayContext, channelId: string, localPerson: LocalPersonImpl, remoteMember: RemoteMember);
    /**
     * @internal
     * @throws {SkyWayError}
     */
    startPublishing(publication: PublicationImpl, subscriptionId: string): Promise<void>;
    /**@internal */
    stopPublishing(publication: Publication): Promise<void>;
    /**@internal */
    startSubscribing(subscription: SubscriptionImpl): Promise<void>;
    /**@internal */
    stopSubscribing(subscription: Subscription): Promise<void>;
    private _closeIfNeeded;
    getStats(content: Subscription | Publication): Promise<RTCStatsReport>;
    /**@internal */
    close({ reason }?: {
        reason?: string;
    }): void;
    private startSendSubscriptionStatsReportTimer;
}
declare const p2pMessageKinds: readonly ["senderProduceMessage", "senderUnproduceMessage", "receiverAnswerMessage", "iceCandidateMessage", "senderRestartIceMessage", "ping"];
/**@internal */
export declare type P2PMessageKind = (typeof p2pMessageKinds)[number];
/**@internal */
export declare type P2PMessage = {
    kind: P2PMessageKind;
    payload: any;
};
export {};
//# sourceMappingURL=index.d.ts.map