import { EncodedEdgeToken } from '../../edgeAuth/EncodedEdgeToken';
import { ISubscribeWithOfferRequest, ISubscribeWithoutOfferRequest } from '../api/Subscribe';
import { BitrateMode, BitrateState } from '../api/SetTemporaryMaximalBitrate';
import { BitsPerSecond, Millisecond } from '../../units/Units';
export type SubscribeStatus = 'ok' | 'no-stream' | 'not-found' | 'unauthorized' | 'geo-restricted' | 'geo-blocked' | 'rate-limited' | 'capacity' | 'timeout' | 'forbidden-tag' | 'port-in-range-not-found' | 'failed';
export type SetRemoteDescriptionStatus = 'ok' | 'not-found' | 'unauthorized' | 'rate-limited' | 'capacity' | 'timeout' | 'failed';
export type SetTemporaryMaximalBitrateStatus = 'ok' | 'not-found' | 'unauthorized' | 'rate-limited' | 'capacity' | 'timeout' | 'failed';
export type RemoveTemporaryMaximalBitrateStatus = 'ok' | 'not-found' | 'unauthorized' | 'rate-limited' | 'capacity' | 'timeout' | 'failed';
export type AddIceCandidatesStatus = 'ok' | 'not-found' | 'unauthorized' | 'rate-limited' | 'capacity' | 'timeout' | 'failed';
export type DestroyStreamStatus = 'ok' | 'not-found' | 'unauthorized' | 'rate-limited' | 'capacity' | 'timeout' | 'failed';
export interface IStream {
    streamId: string;
    sharedSecret: string;
    tenancy: string;
}
export interface ISubscribeSuccessResponseInit {
    status: 'ok';
    stream: IStream;
    lag: Millisecond;
    rtcConfiguration?: RTCConfiguration;
    setRemoteDescriptionResponse?: {
        sessionDescription: RTCSessionDescriptionInit;
    };
    createOfferDescriptionResponse?: {
        sessionDescription: RTCSessionDescriptionInit;
    };
    createAnswerDescriptionResponse?: {
        sessionDescription: RTCSessionDescriptionInit;
    };
    [key: string]: unknown;
}
export interface ISubscribeFailureResponseInit {
    status: 'no-stream' | 'not-found' | 'unauthorized' | 'geo-restricted' | 'geo-blocked' | 'rate-limited' | 'capacity' | 'timeout' | 'forbidden-tag' | 'port-in-range-not-found' | 'failed';
}
export interface ISubscribeRequestCallback {
    (request: ISubscribeWithOfferRequest | ISubscribeWithoutOfferRequest): Promise<void>;
}
export interface ISubscribeResponseCallback {
    (response: ISubscribeSuccessResponseInit | ISubscribeFailureResponseInit): Promise<void>;
}
export type SubscribeOptions = {
    onSubscribeRequestCallback?: ISubscribeRequestCallback;
    onSubscribeResponseCallback?: ISubscribeResponseCallback;
};
export type IPublishSuccessResponseInit = {
    status: 'ok';
    stream: IStream;
    lag?: Millisecond;
    rtcConfiguration?: RTCConfiguration;
    setRemoteDescriptionResponse?: {
        sessionDescription: RTCSessionDescriptionInit;
    };
    createOfferDescriptionResponse?: {
        sessionDescription: RTCSessionDescriptionInit;
    };
    createAnswerDescriptionResponse?: {
        sessionDescription: RTCSessionDescriptionInit;
    };
};
export type IPublishFailureResponseInit = {
    status: 'not-found' | 'geo-restricted' | 'geo-blocked' | 'unauthorized' | 'rate-limited' | 'capacity' | 'timeout' | 'forbidden-tag' | 'missing-channel-or-room-id' | 'port-in-range-not-found' | 'failed';
};
interface ISetRemoteDescriptionResponseInit {
    status: SetRemoteDescriptionStatus;
    sessionDescription?: RTCSessionDescriptionInit;
}
interface IAddIceCandidatesResponseInit {
    status: AddIceCandidatesStatus;
    options?: string[];
}
interface ISetTemporaryMaximalBitrateResponseInit {
    status: SetTemporaryMaximalBitrateStatus;
}
interface IDestroyStreamResponseInit {
    status: DestroyStreamStatus;
}
export default class EndPoint {
    private readonly _logger;
    private readonly _uri;
    private readonly _timeout;
    private _roundTripTime;
    constructor(uri: string, timeout: number);
    get roundTripTime(): number;
    toString(): string;
    ping(): Promise<number>;
    subscribe(token: EncodedEdgeToken, localSessionDescription: RTCSessionDescriptionInit | null, failureCount: number, options?: SubscribeOptions): Promise<ISubscribeSuccessResponseInit | ISubscribeFailureResponseInit>;
    publish(name: string, token: EncodedEdgeToken, localSessionDescription: RTCSessionDescriptionInit | null, failureCount: number): Promise<IPublishSuccessResponseInit | IPublishFailureResponseInit>;
    setRemoteDescription(stream: IStream, sessionDescription: RTCSessionDescriptionInit): Promise<ISetRemoteDescriptionResponseInit>;
    limitBitrate(stream: IStream, elapsedInMilliseconds: number, bitrateInBitsPerSecond: BitsPerSecond, bitrateState: BitrateState, bitrateMode: BitrateMode): Promise<ISetTemporaryMaximalBitrateResponseInit>;
    addIceCandidates(stream: IStream, candidates: RTCIceCandidate[], discoveryCompleted: boolean, options?: string[]): Promise<IAddIceCandidatesResponseInit>;
    destroyStream(stream: IStream, reason: string): Promise<IDestroyStreamResponseInit>;
    destroyStreamOnUnmount(stream: IStream, reason: string): Promise<void>;
    private buildUrl;
    private buildPingUrl;
    private mapHttpStatusToPublishStatus;
    private mapHttpStatusToSubscribeStatus;
    private mapHttpStatusToSetRemoteDescriptionStatus;
    private mapHttpStatusToSetTemporaryMaximalBitrateStatus;
    private mapHttpStatusToAddIceCandidatesStatus;
    private mapHttpStatusToSetDestroyStreamStatus;
    private convertHttpResponseToSubscribeResponse;
    private convertHttpResponseToPublishResponse;
    private convertIRtcConfigurationToRTCConfiguration;
    private convertHttpResponseToSetRemoteDescriptionResponse;
    private convertHttpResponseToAddIceCandidatesResponse;
    private convertHttpResponseToDestroyStreamResponse;
}
export {};
