import { Event } from '@skyway-sdk/common';
import * as sdpTransform from 'sdp-transform';
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 { Codec } from '../../../../media';
import type { LocalPersonImpl } from '../../../../member/localPerson';
import type { RemoteMember } from '../../../../member/remoteMember';
import type { PublicationImpl } from '../../../../publication';
import type { TransportConnectionState } from '../../../interface';
import type { P2PMessage } from '.';
import { Peer } from './peer';
export declare class Sender extends Peer {
    readonly id: string;
    readonly onConnectionStateChanged: Event<TransportConnectionState>;
    publications: {
        [publicationId: string]: PublicationImpl;
    };
    transceivers: {
        [publicationId: string]: RTCRtpTransceiver;
    };
    datachannels: {
        [publicationId: string]: RTCDataChannel;
    };
    private _pendingPublications;
    private _isNegotiating;
    private readonly promiseQueue;
    private _disposer;
    private _ms;
    private _backoffIceRestarted;
    private _connectionState;
    private _log;
    private _unsubscribeStreamEnableChange;
    private _cleanupStreamCallbacks;
    private _endpoint;
    private _sendDataQueue;
    constructor(context: SkyWayContext, iceManager: IceManager, signaling: SignalingSession, analytics: AnalyticsSession | undefined, localPerson: LocalPersonImpl, endpoint: RemoteMember);
    private _setConnectionState;
    /**@throws */
    readonly restartIce: () => Promise<void>;
    get hasMedia(): boolean;
    private _getMid;
    private _listenStreamEnableChange;
    /**@throws {@link SkyWayError} */
    add(publication: PublicationImpl): Promise<void>;
    private _setupTransportAccessForStream;
    /**@throws {SkyWayError} */
    remove(publicationId: string): Promise<void>;
    private _replaceTrack;
    private _handleReceiverAnswer;
    private _safariSetupEncoding;
    /**@throws {@link SkyWayError} */
    private _resolvePendingSender;
    close(): void;
}
export declare function applyCodecCapabilities(codecCapabilities: Codec[], mid: string, sdpObject: sdpTransform.SessionDescription): void;
export interface SenderProduceMessage extends P2PMessage {
    kind: 'senderProduceMessage';
    payload: {
        sdp: RTCSessionDescriptionInit;
        publicationId: string;
        info: {
            publicationId: string;
            streamId: string;
            mid: string;
        };
    };
}
export interface SenderUnproduceMessage extends P2PMessage {
    kind: 'senderUnproduceMessage';
    payload: {
        sdp: RTCSessionDescriptionInit;
        publicationId: string;
    };
}
export interface SenderRestartIceMessage extends P2PMessage {
    kind: 'senderRestartIceMessage';
    payload: {
        sdp: RTCSessionDescriptionInit;
    };
}
//# sourceMappingURL=sender.d.ts.map