// IDL definition extracted from // https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html dictionary RTCConfiguration { sequence iceServers; RTCIceTransportPolicy iceTransportPolicy = "all"; RTCBundlePolicy bundlePolicy = "balanced"; RTCRtcpMuxPolicy rtcpMuxPolicy = "require"; DOMString peerIdentity; sequence certificates; [EnforceRange] octet iceCandidatePoolSize = 0; }; enum RTCIceCredentialType { "password", "oauth" }; dictionary RTCOAuthCredential { required DOMString macKey; required DOMString accessToken; }; dictionary RTCIceServer { required (DOMString or sequence) urls; DOMString username; (DOMString or RTCOAuthCredential) credential; RTCIceCredentialType credentialType = "password"; }; enum RTCIceTransportPolicy { "relay", "all" }; enum RTCBundlePolicy { "balanced", "max-compat", "max-bundle" }; enum RTCRtcpMuxPolicy { // At risk due to lack of implementers' interest. "negotiate", "require" }; dictionary RTCOfferAnswerOptions { boolean voiceActivityDetection = true; }; dictionary RTCOfferOptions : RTCOfferAnswerOptions { boolean iceRestart = false; boolean offerToReceiveAudio; boolean offerToReceiveVideo; }; dictionary RTCAnswerOptions : RTCOfferAnswerOptions { }; [Constructor(optional RTCConfiguration configuration)] interface RTCPeerConnection : EventTarget { Promise createOffer(optional RTCOfferOptions options); Promise createAnswer(optional RTCAnswerOptions options); Promise setLocalDescription(RTCSessionDescriptionInit description); readonly attribute RTCSessionDescription? localDescription; readonly attribute RTCSessionDescription? currentLocalDescription; readonly attribute RTCSessionDescription? pendingLocalDescription; Promise setRemoteDescription(RTCSessionDescriptionInit description); readonly attribute RTCSessionDescription? remoteDescription; readonly attribute RTCSessionDescription? currentRemoteDescription; readonly attribute RTCSessionDescription? pendingRemoteDescription; Promise addIceCandidate((RTCIceCandidateInit or RTCIceCandidate) candidate); readonly attribute RTCSignalingState signalingState; readonly attribute RTCIceGatheringState iceGatheringState; readonly attribute RTCIceConnectionState iceConnectionState; readonly attribute RTCPeerConnectionState connectionState; readonly attribute boolean? canTrickleIceCandidates; static sequence getDefaultIceServers(); RTCConfiguration getConfiguration(); void setConfiguration(RTCConfiguration configuration); void close(); attribute EventHandler onnegotiationneeded; attribute EventHandler onicecandidate; attribute EventHandler onicecandidateerror; attribute EventHandler onsignalingstatechange; attribute EventHandler oniceconnectionstatechange; attribute EventHandler onicegatheringstatechange; attribute EventHandler onconnectionstatechange; attribute EventHandler onfingerprintfailure; }; partial interface RTCPeerConnection { Promise createOffer(RTCSessionDescriptionCallback successCallback, RTCPeerConnectionErrorCallback failureCallback, optional RTCOfferOptions options); Promise setLocalDescription(RTCSessionDescriptionInit description, VoidFunction successCallback, RTCPeerConnectionErrorCallback failureCallback); Promise createAnswer(RTCSessionDescriptionCallback successCallback, RTCPeerConnectionErrorCallback failureCallback); Promise setRemoteDescription(RTCSessionDescriptionInit description, VoidFunction successCallback, RTCPeerConnectionErrorCallback failureCallback); Promise addIceCandidate((RTCIceCandidateInit or RTCIceCandidate) candidate, VoidFunction successCallback, RTCPeerConnectionErrorCallback failureCallback); }; callback RTCPeerConnectionErrorCallback = void (DOMException error); callback RTCSessionDescriptionCallback = void (RTCSessionDescriptionInit description); enum RTCSignalingState { "stable", "have-local-offer", "have-remote-offer", "have-local-pranswer", "have-remote-pranswer", "closed" }; enum RTCIceGatheringState { "new", "gathering", "complete" }; enum RTCPeerConnectionState { "new", "connecting", "connected", "disconnected", "failed", "closed" }; enum RTCIceConnectionState { "new", "checking", "connected", "completed", "failed", "disconnected", "closed" }; enum RTCSdpType { "offer", "pranswer", "answer", "rollback" }; [Constructor(RTCSessionDescriptionInit descriptionInitDict)] interface RTCSessionDescription { readonly attribute RTCSdpType type; readonly attribute DOMString sdp; [Default] object toJSON(); }; dictionary RTCSessionDescriptionInit { required RTCSdpType type; DOMString sdp = ""; }; [Constructor(optional RTCIceCandidateInit candidateInitDict)] interface RTCIceCandidate { readonly attribute DOMString candidate; readonly attribute DOMString? sdpMid; readonly attribute unsigned short? sdpMLineIndex; readonly attribute DOMString? foundation; readonly attribute RTCIceComponent? component; readonly attribute unsigned long? priority; readonly attribute DOMString? ip; readonly attribute RTCIceProtocol? protocol; readonly attribute unsigned short? port; readonly attribute RTCIceCandidateType? type; readonly attribute RTCIceTcpCandidateType? tcpType; readonly attribute DOMString? relatedAddress; readonly attribute unsigned short? relatedPort; readonly attribute DOMString? usernameFragment; RTCIceCandidateInit toJSON(); }; dictionary RTCIceCandidateInit { DOMString candidate = ""; DOMString? sdpMid = null; unsigned short? sdpMLineIndex = null; DOMString usernameFragment; }; enum RTCIceProtocol { "udp", "tcp" }; enum RTCIceTcpCandidateType { "active", "passive", "so" }; enum RTCIceCandidateType { "host", "srflx", "prflx", "relay" }; [Constructor(DOMString type, optional RTCPeerConnectionIceEventInit eventInitDict)] interface RTCPeerConnectionIceEvent : Event { readonly attribute RTCIceCandidate? candidate; readonly attribute DOMString? url; }; dictionary RTCPeerConnectionIceEventInit : EventInit { RTCIceCandidate? candidate; DOMString? url; }; [Constructor(DOMString type, RTCPeerConnectionIceErrorEventInit eventInitDict)] interface RTCPeerConnectionIceErrorEvent : Event { readonly attribute DOMString hostCandidate; readonly attribute DOMString url; readonly attribute unsigned short errorCode; readonly attribute USVString errorText; }; dictionary RTCPeerConnectionIceErrorEventInit : EventInit { DOMString hostCandidate; DOMString url; required unsigned short errorCode; USVString statusText; }; enum RTCPriorityType { "very-low", "low", "medium", "high" }; partial interface RTCPeerConnection { static Promise generateCertificate(AlgorithmIdentifier keygenAlgorithm); }; dictionary RTCCertificateExpiration { [EnforceRange] DOMTimeStamp expires; }; interface RTCCertificate { readonly attribute DOMTimeStamp expires; sequence getFingerprints(); // At risk due to lack of implementers' interest. AlgorithmIdentifier getAlgorithm(); }; partial interface RTCPeerConnection { sequence getSenders(); sequence getReceivers(); sequence getTransceivers(); RTCRtpSender addTrack(MediaStreamTrack track, MediaStream... streams); void removeTrack(RTCRtpSender sender); RTCRtpTransceiver addTransceiver((MediaStreamTrack or DOMString) trackOrKind, optional RTCRtpTransceiverInit init); attribute EventHandler ontrack; }; dictionary RTCRtpTransceiverInit { RTCRtpTransceiverDirection direction = "sendrecv"; sequence streams; sequence sendEncodings; }; enum RTCRtpTransceiverDirection { "sendrecv", "sendonly", "recvonly", "inactive" }; interface RTCRtpSender { readonly attribute MediaStreamTrack? track; readonly attribute RTCDtlsTransport? transport; readonly attribute RTCDtlsTransport? rtcpTransport; // Feature at risk static RTCRtpCapabilities getCapabilities(DOMString kind); Promise setParameters(optional RTCRtpParameters parameters); RTCRtpParameters getParameters(); Promise replaceTrack(MediaStreamTrack withTrack); Promise getStats(); }; dictionary RTCRtpParameters { DOMString transactionId; sequence encodings; sequence headerExtensions; RTCRtcpParameters rtcp; sequence codecs; RTCDegradationPreference degradationPreference; }; dictionary RTCRtpEncodingParameters { unsigned long ssrc; RTCRtpRtxParameters rtx; RTCRtpFecParameters fec; RTCDtxStatus dtx; boolean active; RTCPriorityType priority; unsigned long ptime; unsigned long maxBitrate; double maxFramerate; DOMString rid; double scaleResolutionDownBy; }; enum RTCDtxStatus { "disabled", "enabled" }; enum RTCDegradationPreference { "maintain-framerate", "maintain-resolution", "balanced" }; dictionary RTCRtpRtxParameters { unsigned long ssrc; }; dictionary RTCRtpFecParameters { unsigned long ssrc; }; dictionary RTCRtcpParameters { DOMString cname; boolean reducedSize; }; dictionary RTCRtpHeaderExtensionParameters { DOMString uri; unsigned short id; boolean encrypted; }; dictionary RTCRtpCodecParameters { unsigned short payloadType; DOMString mimeType; unsigned long clockRate; unsigned short channels; DOMString sdpFmtpLine; }; dictionary RTCRtpCapabilities { sequence codecs; sequence headerExtensions; }; dictionary RTCRtpCodecCapability { DOMString mimeType; unsigned long clockRate; unsigned short channels; DOMString sdpFmtpLine; }; dictionary RTCRtpHeaderExtensionCapability { DOMString uri; }; interface RTCRtpReceiver { readonly attribute MediaStreamTrack track; readonly attribute RTCDtlsTransport? transport; readonly attribute RTCDtlsTransport? rtcpTransport; // Feature at risk static RTCRtpCapabilities getCapabilities(DOMString kind); RTCRtpParameters getParameters(); sequence getContributingSources(); sequence getSynchronizationSources(); Promise getStats(); }; interface RTCRtpContributingSource { readonly attribute DOMHighResTimeStamp timestamp; readonly attribute unsigned long source; readonly attribute byte? audioLevel; }; interface RTCRtpSynchronizationSource { readonly attribute DOMHighResTimeStamp timestamp; readonly attribute unsigned long source; readonly attribute byte audioLevel; readonly attribute boolean? voiceActivityFlag; }; interface RTCRtpTransceiver { readonly attribute DOMString? mid; [SameObject] readonly attribute RTCRtpSender sender; [SameObject] readonly attribute RTCRtpReceiver receiver; readonly attribute boolean stopped; readonly attribute RTCRtpTransceiverDirection direction; readonly attribute RTCRtpTransceiverDirection? currentDirection; void setDirection(RTCRtpTransceiverDirection direction); void stop(); void setCodecPreferences(sequence codecs); }; interface RTCDtlsTransport { readonly attribute RTCIceTransport transport; readonly attribute RTCDtlsTransportState state; sequence getRemoteCertificates(); attribute EventHandler onstatechange; }; enum RTCDtlsTransportState { "new", "connecting", "connected", "closed", "failed" }; dictionary RTCDtlsFingerprint { DOMString algorithm; DOMString value; }; interface RTCIceTransport { readonly attribute RTCIceRole role; readonly attribute RTCIceComponent component; readonly attribute RTCIceTransportState state; readonly attribute RTCIceGathererState gatheringState; sequence getLocalCandidates(); sequence getRemoteCandidates(); RTCIceCandidatePair? getSelectedCandidatePair(); RTCIceParameters? getLocalParameters(); RTCIceParameters? getRemoteParameters(); attribute EventHandler onstatechange; attribute EventHandler ongatheringstatechange; attribute EventHandler onselectedcandidatepairchange; }; dictionary RTCIceParameters { DOMString usernameFragment; DOMString password; }; dictionary RTCIceCandidatePair { RTCIceCandidate local; RTCIceCandidate remote; }; enum RTCIceGathererState { "new", "gathering", "complete" }; enum RTCIceTransportState { "new", "checking", "connected", "completed", "failed", "disconnected", "closed" }; enum RTCIceRole { "controlling", "controlled" }; enum RTCIceComponent { "rtp", "rtcp" }; [Constructor(DOMString type, RTCTrackEventInit eventInitDict)] interface RTCTrackEvent : Event { readonly attribute RTCRtpReceiver receiver; readonly attribute MediaStreamTrack track; [SameObject] readonly attribute FrozenArray streams; readonly attribute RTCRtpTransceiver transceiver; }; dictionary RTCTrackEventInit : EventInit { required RTCRtpReceiver receiver; required MediaStreamTrack track; sequence streams = []; required RTCRtpTransceiver transceiver; }; partial interface RTCPeerConnection { readonly attribute RTCSctpTransport? sctp; RTCDataChannel createDataChannel(USVString label, optional RTCDataChannelInit dataChannelDict); attribute EventHandler ondatachannel; }; interface RTCSctpTransport { readonly attribute RTCDtlsTransport transport; readonly attribute unrestricted double maxMessageSize; }; interface RTCDataChannel : EventTarget { readonly attribute USVString label; readonly attribute boolean ordered; readonly attribute unsigned short? maxPacketLifeTime; readonly attribute unsigned short? maxRetransmits; readonly attribute USVString protocol; readonly attribute boolean negotiated; readonly attribute unsigned short? id; readonly attribute RTCPriorityType priority; readonly attribute RTCDataChannelState readyState; readonly attribute unsigned long bufferedAmount; attribute unsigned long bufferedAmountLowThreshold; attribute EventHandler onopen; attribute EventHandler onbufferedamountlow; attribute EventHandler onerror; attribute EventHandler onclose; void close(); attribute EventHandler onmessage; attribute DOMString binaryType; void send(USVString data); void send(Blob data); void send(ArrayBuffer data); void send(ArrayBufferView data); }; dictionary RTCDataChannelInit { boolean ordered = true; unsigned short maxPacketLifeTime; unsigned short maxRetransmits; USVString protocol = ""; boolean negotiated = false; [EnforceRange] unsigned short id; RTCPriorityType priority = "low"; }; enum RTCDataChannelState { "connecting", "open", "closing", "closed" }; [Constructor(DOMString type, RTCDataChannelEventInit eventInitDict)] interface RTCDataChannelEvent : Event { readonly attribute RTCDataChannel channel; }; dictionary RTCDataChannelEventInit : EventInit { required RTCDataChannel channel; }; partial interface RTCRtpSender { readonly attribute RTCDTMFSender? dtmf; }; interface RTCDTMFSender : EventTarget { void insertDTMF(DOMString tones, optional unsigned long duration = 100, optional unsigned long interToneGap = 70); attribute EventHandler ontonechange; readonly attribute DOMString toneBuffer; }; [Constructor(DOMString type, RTCDTMFToneChangeEventInit eventInitDict)] interface RTCDTMFToneChangeEvent : Event { readonly attribute DOMString tone; }; dictionary RTCDTMFToneChangeEventInit : EventInit { required DOMString tone; }; partial interface RTCPeerConnection { Promise getStats(optional MediaStreamTrack? selector = null); }; interface RTCStatsReport { readonly maplike; }; dictionary RTCStats { DOMHighResTimeStamp timestamp; RTCStatsType type; DOMString id; }; [Global, Exposed=RTCIdentityProviderGlobalScope] interface RTCIdentityProviderGlobalScope : WorkerGlobalScope { readonly attribute RTCIdentityProviderRegistrar rtcIdentityProvider; }; [Exposed=RTCIdentityProviderGlobalScope] interface RTCIdentityProviderRegistrar { void register(RTCIdentityProvider idp); }; dictionary RTCIdentityProvider { required GenerateAssertionCallback generateAssertion; required ValidateAssertionCallback validateAssertion; }; callback GenerateAssertionCallback = Promise (DOMString contents, DOMString origin, RTCIdentityProviderOptions options); callback ValidateAssertionCallback = Promise (DOMString assertion, DOMString origin); dictionary RTCIdentityAssertionResult { required RTCIdentityProviderDetails idp; required DOMString assertion; }; dictionary RTCIdentityProviderDetails { required DOMString domain; DOMString protocol = "default"; }; dictionary RTCIdentityValidationResult { required DOMString identity; required DOMString contents; }; partial interface RTCPeerConnection { void setIdentityProvider(DOMString provider, optional RTCIdentityProviderOptions options); Promise getIdentityAssertion(); readonly attribute Promise peerIdentity; readonly attribute DOMString? idpLoginUrl; readonly attribute DOMString? idpErrorInfo; }; dictionary RTCIdentityProviderOptions { DOMString protocol = "default"; DOMString usernameHint; DOMString peerIdentity; }; [Constructor(DOMString idp, DOMString name)] interface RTCIdentityAssertion { attribute DOMString idp; attribute DOMString name; }; partial dictionary MediaStreamConstraints { DOMString peerIdentity; }; partial interface MediaStreamTrack { readonly attribute boolean isolated; attribute EventHandler onisolationchange; }; enum RTCErrorDetailType { "data-channel-failure", "idp-bad-script-failure", "idp-execution-failure", "idp-load-failure", "idp-need-login", "idp-timeout", "idp-tls-failure", "idp-token-expired", "idp-token-invalid", "sctp-failure", "sdp-syntax-error" }; [Exposed=Window, Constructor(DOMString type, RTCErrorEventInit eventInitDict)] interface RTCErrorEvent : Event { readonly attribute RTCError? error; }; dictionary RTCErrorEventInit : EventInit { RTCError? error = null; };