import IDisposable from '../../lang/IDisposable';
import ReadOnlySubject from '../../rx/ReadOnlySubject';
import EndPoint, { IStream } from '../discovery/EndPoint';
import IPeerConnection from '../../rtc/IPeerConnection';
import { IRtcPublishMonitorStatistic } from '../../rtc/RtcPublishMonitor';
import PublisherState from './PublisherState';
import { EncodedEdgeToken } from '../../edgeAuth/EncodedEdgeToken';
export default class Publisher implements IDisposable {
    private readonly _logger;
    private readonly _tokenContext;
    private readonly _publisherContext;
    private readonly _peerConnectionContext;
    private readonly _stateContext;
    private readonly _exponentialBackoff;
    private readonly _publisherStartTime;
    private readonly _readOnlyToken;
    private readonly _readOnlyPeerConnection;
    private readonly _readOnlyState;
    private readonly _readOnlyTokenExpiring;
    private readonly _readOnlyAuthorized;
    private readonly _readOnlyOnline;
    private readonly _readOnlyLoading;
    private readonly _readOnlyPublishing;
    private readonly _readOnlyStandby;
    private readonly _readOnlyStopped;
    private readonly _readOnlyFailureCount;
    private readonly _readOnlyEndPoint;
    private readonly _readOnlyStream;
    private readonly _readOnlyRtcStatistics;
    private readonly _readOnlyMediaStream;
    private _metricsService;
    private readonly _sessionTelemetry;
    constructor(mediaStream: MediaStream, token: EncodedEdgeToken, name?: string);
    get token(): EncodedEdgeToken;
    set token(token: EncodedEdgeToken);
    get peerConnection(): ReadOnlySubject<IPeerConnection | null>;
    get state(): ReadOnlySubject<PublisherState>;
    get tokenExpiring(): ReadOnlySubject<boolean>;
    get authorized(): ReadOnlySubject<boolean>;
    get online(): ReadOnlySubject<boolean>;
    get loading(): ReadOnlySubject<boolean>;
    get publishing(): ReadOnlySubject<boolean>;
    get standby(): ReadOnlySubject<boolean>;
    get stopped(): ReadOnlySubject<boolean>;
    get failureCount(): ReadOnlySubject<number>;
    get endPoint(): ReadOnlySubject<EndPoint | null>;
    get stream(): ReadOnlySubject<IStream | null>;
    get streamId(): string;
    get rtcStatistics(): ReadOnlySubject<IRtcPublishMonitorStatistic | null>;
    get mediaStream(): ReadOnlySubject<MediaStream | null>;
    stop(reason: string): Promise<void>;
    private processStop;
    dispose(): Promise<void>;
    getUri(token: EncodedEdgeToken): URL;
    start(): Promise<void>;
    private processStart;
    setMediaStream(mediaStream: MediaStream): void;
    private getRetryInterval;
    private handleStreamFailure;
    private cleanUpResources;
}
