blob: 9bbda8a0488aa2002575426ace933b55d6d4b232 [file] [log] [blame]
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
//
// API docs from [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web).
// Attributions and copyright licensing by Mozilla Contributors is licensed
// under [CC-BY-SA 2.5](https://creativecommons.org/licenses/by-sa/2.5/.
// Generated from Web IDL definitions.
// ignore_for_file: unintended_html_in_doc_comment
@JS()
library;
import 'dart:js_interop';
import 'dom.dart';
import 'hr_time.dart';
import 'html.dart';
import 'mediacapture_streams.dart';
import 'mst_content_hint.dart';
import 'webcryptoapi.dart';
import 'webidl.dart';
import 'webrtc_encoded_transform.dart';
import 'webrtc_identity.dart';
import 'webrtc_priority.dart';
import 'websockets.dart';
typedef RTCPeerConnectionErrorCallback = JSFunction;
typedef RTCSessionDescriptionCallback = JSFunction;
typedef RTCIceTransportPolicy = String;
typedef RTCBundlePolicy = String;
typedef RTCRtcpMuxPolicy = String;
typedef RTCSignalingState = String;
typedef RTCIceGatheringState = String;
typedef RTCPeerConnectionState = String;
typedef RTCIceConnectionState = String;
typedef RTCSdpType = String;
typedef RTCIceProtocol = String;
typedef RTCIceTcpCandidateType = String;
typedef RTCIceCandidateType = String;
typedef RTCRtpTransceiverDirection = String;
typedef RTCDtlsTransportState = String;
typedef RTCIceGathererState = String;
typedef RTCIceTransportState = String;
typedef RTCIceRole = String;
typedef RTCIceComponent = String;
typedef RTCSctpTransportState = String;
typedef RTCDataChannelState = String;
typedef RTCErrorDetailType = String;
extension type RTCConfiguration._(JSObject _) implements JSObject {
external factory RTCConfiguration({
JSArray<RTCIceServer> iceServers,
RTCIceTransportPolicy iceTransportPolicy,
RTCBundlePolicy bundlePolicy,
RTCRtcpMuxPolicy rtcpMuxPolicy,
JSArray<RTCCertificate> certificates,
int iceCandidatePoolSize,
String peerIdentity,
});
external JSArray<RTCIceServer> get iceServers;
external set iceServers(JSArray<RTCIceServer> value);
external RTCIceTransportPolicy get iceTransportPolicy;
external set iceTransportPolicy(RTCIceTransportPolicy value);
external RTCBundlePolicy get bundlePolicy;
external set bundlePolicy(RTCBundlePolicy value);
external RTCRtcpMuxPolicy get rtcpMuxPolicy;
external set rtcpMuxPolicy(RTCRtcpMuxPolicy value);
external JSArray<RTCCertificate> get certificates;
external set certificates(JSArray<RTCCertificate> value);
external int get iceCandidatePoolSize;
external set iceCandidatePoolSize(int value);
external String get peerIdentity;
external set peerIdentity(String value);
}
extension type RTCIceServer._(JSObject _) implements JSObject {
external factory RTCIceServer({
required JSAny urls,
String username,
String credential,
});
external JSAny get urls;
external set urls(JSAny value);
external String get username;
external set username(String value);
external String get credential;
external set credential(String value);
}
extension type RTCOfferAnswerOptions._(JSObject _) implements JSObject {
RTCOfferAnswerOptions() : _ = JSObject();
}
extension type RTCOfferOptions._(JSObject _)
implements RTCOfferAnswerOptions, JSObject {
external factory RTCOfferOptions({
bool iceRestart,
bool offerToReceiveAudio,
bool offerToReceiveVideo,
});
external bool get iceRestart;
external set iceRestart(bool value);
external bool get offerToReceiveAudio;
external set offerToReceiveAudio(bool value);
external bool get offerToReceiveVideo;
external set offerToReceiveVideo(bool value);
}
extension type RTCAnswerOptions._(JSObject _)
implements RTCOfferAnswerOptions, JSObject {
RTCAnswerOptions() : _ = JSObject();
}
/// The **`RTCPeerConnection`** interface represents a WebRTC connection between
/// the local computer and a remote peer.
/// It provides methods to connect to a remote peer, maintain and monitor the
/// connection, and close the connection once it's no longer needed.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection).
extension type RTCPeerConnection._(JSObject _)
implements EventTarget, JSObject {
external factory RTCPeerConnection([RTCConfiguration configuration]);
/// The **`generateCertificate()`** static function of the [RTCPeerConnection]
/// interface creates an X.509 certificate and corresponding private key,
/// returning a promise that resolves with the new [RTCCertificate] once it's
/// generated.
external static JSPromise<RTCCertificate> generateCertificate(
AlgorithmIdentifier keygenAlgorithm);
/// The **`createOffer()`** method of the [RTCPeerConnection] interface
/// initiates the creation of an offer for the purpose of starting a new
/// WebRTC connection to a remote peer.
///
/// The SDP offer includes information about any [MediaStreamTrack] objects
/// already attached to the WebRTC session, codec, and options supported by
/// the browser, and any candidates already gathered by the agent, for the
/// purpose of being sent over the signaling channel to a potential peer to
/// request a connection or to update the configuration of an existing
/// connection.
external JSPromise<RTCSessionDescriptionInit?> createOffer([
JSObject optionsOrSuccessCallback,
RTCPeerConnectionErrorCallback failureCallback,
RTCOfferOptions options,
]);
/// The **`createAnswer()`** method of the [RTCPeerConnection] interface
/// creates an answer to an offer received from a remote peer during the
/// offer/answer negotiation of a WebRTC connection.
///
/// The answer contains information about any media already attached to the
/// session, codecs and options supported by the browser, and any candidates
/// already gathered.
/// The answer is delivered to the returned `Promise`, and should then be sent
/// to the source of the offer to continue the negotiation process.
external JSPromise<RTCSessionDescriptionInit?> createAnswer([
JSObject optionsOrSuccessCallback,
RTCPeerConnectionErrorCallback failureCallback,
]);
/// The **`setLocalDescription()`** method of the [RTCPeerConnection]
/// interface changes the local description associated with the connection.
/// This description specifies the properties of the local end of the
/// connection, including the media format.
/// The method takes a single parameter—the session description—and it returns
/// a `Promise` which is fulfilled once the description has been changed,
/// asynchronously.
///
/// If `setLocalDescription()` is called while a connection is already in
/// place, it means renegotiation is underway (possibly to adapt to changing
/// network conditions).
/// Because descriptions will be exchanged until the two peers agree on a
/// configuration, the description submitted by calling
/// `setLocalDescription()` does not immediately take effect.
/// Instead, the current connection configuration remains in place until
/// negotiation is complete. Only then does the agreed-upon configuration take
/// effect.
external JSPromise<JSAny?> setLocalDescription([
RTCLocalSessionDescriptionInit description,
VoidFunction successCallback,
RTCPeerConnectionErrorCallback failureCallback,
]);
/// The **`setRemoteDescription()`** method of the [RTCPeerConnection]
/// interface sets the specified session description as the remote peer's
/// current offer or answer.
/// The description specifies the properties of the remote end of the
/// connection, including the media format.
/// The method takes a single parameter—the session description—and it returns
/// a `Promise` which is fulfilled once the description has been changed,
/// asynchronously.
///
/// This is typically called after receiving an offer or answer from another
/// peer over the signaling server.
/// Keep in mind that if `setRemoteDescription()` is called while a connection
/// is already in place, it means renegotiation is underway (possibly to adapt
/// to changing network conditions).
///
/// Because descriptions will be exchanged until the two peers agree on a
/// configuration, the description submitted by calling
/// `setRemoteDescription()` does not immediately take effect.
/// Instead, the current connection configuration remains in place until
/// negotiation is complete.
/// Only then does the agreed-upon configuration take effect.
external JSPromise<JSAny?> setRemoteDescription(
RTCSessionDescriptionInit description, [
VoidFunction successCallback,
RTCPeerConnectionErrorCallback failureCallback,
]);
/// The **`addIceCandidate()`** method of the [RTCPeerConnection] interface
/// adds a new remote candidate to the connection's remote description, which
/// describes the state of the remote end of the connection.
///
/// When a website or app using [RTCPeerConnection] receives a new ICE
/// candidate from the remote peer over its signaling channel, it delivers the
/// newly-received candidate to the browser's agent by calling
/// **`RTCPeerConnection.addIceCandidate()`**.
/// This adds this new remote candidate to the `RTCPeerConnection`'s remote
/// description, which describes the state of the remote end of the
/// connection.
///
/// If the `candidate` parameter is missing or a value of `null` is given when
/// calling `addIceCandidate()`, the added ICE candidate is an
/// "end-of-candidates" indicator.
/// The same is the case if the value of the specified object's
/// [RTCIceCandidate.candidate] is either missing or an empty string (`""`),
/// it signals that all remote candidates have been delivered.
///
/// The end-of-candidates notification is transmitted to the remote peer using
/// a candidate with an a-line value of `end-of-candidates`.
///
/// During negotiation, your app will likely receive many candidates which
/// you'll deliver to the ICE agent in this way, allowing it to build up a
/// list of potential connection methods.
/// This is covered in more detail in the articles
/// [WebRTC connectivity](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Connectivity)
/// and
/// [Signaling and video calling](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Signaling_and_video_calling).
external JSPromise<JSAny?> addIceCandidate([
RTCIceCandidateInit candidate,
VoidFunction successCallback,
RTCPeerConnectionErrorCallback failureCallback,
]);
/// The **`restartIce()`** method of the [RTCPeerConnection] interface allows
/// a web application to request that candidate gathering be redone on both
/// ends of the connection.
/// This simplifies the process by allowing the same method to be used by
/// either the caller or the receiver to trigger an ICE restart.
///
/// After `restartIce()` returns, the offer returned by the next call to
/// [RTCPeerConnection.createOffer] is automatically configured to trigger ICE
/// restart on both the local peer (once the local peer has been set) and on
/// the remote peer, once the offer is sent across your signaling mechanism
/// and the remote peer has set its description as well.
///
/// `restartIce()` causes the
/// [RTCPeerConnection.negotiationneeded_event] event to be fired on the
/// `RTCPeerConnection` to inform the application that it should perform
/// negotiation using its signaling channel.
///
/// If negotiation fails to complete—either due to rollback or because
/// incoming offers are in the process of being negotiated—the
/// [RTCPeerConnection] will remember that you requested ICE restart.
/// The next time the connection's [RTCPeerConnection.signalingState] changes
/// to `stable`, the connection will fire the
/// [RTCPeerConnection.negotiationneeded_event] event.
/// This process continues until an ICE restart has been successfully
/// completed.
external void restartIce();
/// The **`getConfiguration()`** method of the [RTCPeerConnection] interface
/// returns an object which indicates the current configuration of the
/// [RTCPeerConnection] on which the method is called.
///
/// The returned configuration is the last configuration applied via
/// [RTCPeerConnection.setConfiguration], or if
/// `setConfiguration()` hasn't been called, the configuration the
/// `RTCPeerConnection` was constructed with.
/// The configuration includes a list of the ICE servers used by the
/// connection, information about transport policies, and identity
/// information.
external RTCConfiguration getConfiguration();
/// The **`setConfiguration()`** method of the [RTCPeerConnection] interface
/// sets the current configuration of the connection based on the values
/// included in the specified object.
/// This lets you change the ICE servers used by the connection and which
/// transport policies to use.
///
/// The most common use case for this method (and even then, probably not a
/// very common use case) is to replace the set of ICE servers to be used. Two
/// potential scenarios in which this might be done:
///
/// - The [RTCPeerConnection] was instantiated without specifying any ICE
/// servers.
/// If, for example, the [RTCPeerConnection.RTCPeerConnection] constructor was
/// called with no parameters, you would have to then call
/// `setConfiguration()` to add ICE servers before ICE negotiation could
/// begin.
/// - Renegotiation of the connection is needed, and a different set of ICE
/// servers needs to be used for some reason.
/// Perhaps the user has moved into a new region, so using new regional ICE
/// servers is necessary, for example.
/// In this situation, one might call `setConfiguration()` to switch to new
/// regional ICE servers, then initiate an
/// [ICE restart](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Session_lifetime#ice_restart).
///
/// > [!NOTE]
/// > You cannot change the identity information for a connection once it's
/// > already been set.
external void setConfiguration([RTCConfiguration configuration]);
/// The **`close()`** method of the [RTCPeerConnection] interface closes the
/// current peer connection.
external void close();
/// The **`setIdentityProvider()`** method of the [RTCPeerConnection]
/// interface sets the Identity Provider (IdP) to the triplet given in
/// parameter: its name, the protocol used to communicate with it (optional)
/// and an optional username.
/// The IdP will be used only when an assertion is needed.
///
/// If the [RTCPeerConnection.signalingState] is set to `"closed"`, an
/// `InvalidStateError` is raised.
external void setIdentityProvider(
String provider, [
RTCIdentityProviderOptions options,
]);
/// The **`getIdentityAssertion()`** method of the [RTCPeerConnection]
/// interface initiates the gathering of an identity assertion.
/// This has an effect only if the [RTCPeerConnection.signalingState] is not
/// `"closed"`.
///
/// The method returns a JavaScript `Promise` which resolves to an identity
/// assertion encoded as a string.
///
/// It is not expected for the application dealing with the
/// `RTCPeerConnection`: this is automatically done; an explicit call only
/// allows to anticipate the need.
external JSPromise<JSString> getIdentityAssertion();
/// The **`getSenders()`** method of the [RTCPeerConnection] interface returns
/// an array of [RTCRtpSender] objects, each of which represents the RTP
/// sender responsible for transmitting one track's data.
/// A sender object provides methods and properties for examining and
/// controlling the encoding and transmission of the track's data.
external JSArray<RTCRtpSender> getSenders();
/// The **`getReceivers()`** method of the [RTCPeerConnection] interface
/// returns an array of [RTCRtpReceiver] objects, each of which represents one
/// RTP receiver.
/// Each RTP receiver manages the reception and decoding of data for a
/// [MediaStreamTrack] on an [RTCPeerConnection].
external JSArray<RTCRtpReceiver> getReceivers();
/// The **`getTransceivers()`** method of the [RTCPeerConnection] interface
/// returns a list of the [RTCRtpTransceiver] objects being used to send and
/// receive data on the connection.
external JSArray<RTCRtpTransceiver> getTransceivers();
/// The **`addTrack()`** method of the [RTCPeerConnection] interface adds a
/// new media track to the set of tracks which will be transmitted to the
/// other peer.
///
/// > [!NOTE]
/// > Adding a track to a connection triggers renegotiation by firing a
/// > [RTCPeerConnection.negotiationneeded_event] event.
/// > See
/// > [Starting negotiation](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Signaling_and_video_calling#starting_negotiation)
/// > for details.
external RTCRtpSender addTrack(
MediaStreamTrack track, [
MediaStream stream1,
MediaStream stream2,
MediaStream stream3,
MediaStream stream4,
]);
/// The **`removeTrack()`** method of the [RTCPeerConnection] interface tells
/// the local end of the connection to stop sending media from the specified
/// track, without actually removing the corresponding [RTCRtpSender] from the
/// list of senders as reported by [RTCPeerConnection.getSenders].
/// If the track is already stopped, or is not in the connection's senders
/// list, this method has no effect.
///
/// If the connection has already been negotiated
/// ([RTCPeerConnection.signalingState] is set to `"stable"`), it is marked as
/// needing to be negotiated again; the remote peer won't experience the
/// change until this negotiation occurs.
/// A [RTCPeerConnection.negotiationneeded_event] event is sent to the
/// [RTCPeerConnection] to let the local end know this negotiation must occur.
external void removeTrack(RTCRtpSender sender);
/// The **`addTransceiver()`** method of the [RTCPeerConnection] interface
/// creates a new [RTCRtpTransceiver] and adds it to the set of transceivers
/// associated with the `RTCPeerConnection`.
/// Each transceiver represents a bidirectional stream, with both an
/// [RTCRtpSender] and an [RTCRtpReceiver] associated with it.
external RTCRtpTransceiver addTransceiver(
JSAny trackOrKind, [
RTCRtpTransceiverInit init,
]);
/// The **`createDataChannel()`** method of the [RTCPeerConnection] interface
/// creates a new channel linked with the remote peer, over which any kind of
/// data may be transmitted.
/// This can be useful for back-channel content, such as images, file
/// transfer, text chat, game update packets, and so forth.
///
/// If the new data channel is the first one added to the connection,
/// renegotiation is started by delivering a
/// [RTCPeerConnection.negotiationneeded_event] event.
external RTCDataChannel createDataChannel(
String label, [
RTCDataChannelInit dataChannelDict,
]);
/// The **`getStats()`** method of the [RTCPeerConnection] interface returns a
/// promise which resolves with data providing statistics about either the
/// overall connection or about the specified [MediaStreamTrack].
external JSPromise<RTCStatsReport> getStats([MediaStreamTrack? selector]);
/// The **`localDescription`** read-only property of the [RTCPeerConnection]
/// interface returns an [RTCSessionDescription] describing the session for
/// the local end of the connection.
/// If it has not yet been set, this is `null`.
external RTCSessionDescription? get localDescription;
/// The **`currentLocalDescription`** read-only property of the
/// [RTCPeerConnection] interface returns an [RTCSessionDescription] object
/// describing the local end of the connection as it was most recently
/// successfully negotiated since the last time the [RTCPeerConnection]
/// finished negotiating and connecting to a remote peer.
/// Also included is a list of any ICE candidates that may already have been
/// generated by the ICE agent since the offer or answer represented by the
/// description was first instantiated.
///
/// To change the `currentLocalDescription`, call
/// [RTCPeerConnection.setLocalDescription], which triggers a series of events
/// which leads to this value being set.
/// For details on what exactly happens and why the change isn't necessarily
/// instantaneous, see
/// [Pending and current descriptions](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Connectivity#pending_and_current_descriptions)
/// in the WebRTC Connectivity page.
///
/// > [!NOTE]
/// > Unlike [RTCPeerConnection.localDescription], this value represents the
/// > actual current state of the local end of the connection;
/// > `localDescription` may specify a description which the connection is
/// > currently in the process of switching over to.
external RTCSessionDescription? get currentLocalDescription;
/// The **`pendingLocalDescription`** read-only property of the
/// [RTCPeerConnection] interface returns an [RTCSessionDescription] object
/// describing a pending configuration change for the local end of the
/// connection.
///
/// This does not describe the connection as it currently stands, but as it
/// may exist in the near future.
/// Use [RTCPeerConnection.currentLocalDescription] or
/// [RTCPeerConnection.localDescription] to get the current state of the
/// endpoint.
/// For details on the difference, see
/// [Pending and current descriptions](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Connectivity#pending_and_current_descriptions)
/// in the WebRTC Connectivity page.
external RTCSessionDescription? get pendingLocalDescription;
/// The **`remoteDescription`** read-only property of the [RTCPeerConnection]
/// interface returns a [RTCSessionDescription] describing the session (which
/// includes configuration and media information) for the remote end of the
/// connection.
/// If this hasn't been set yet, this is `null`.
///
/// The returned value typically reflects a remote description which has been
/// received over the signaling server (as either an offer or an answer) and
/// then put into effect by your code calling
/// [RTCPeerConnection.setRemoteDescription] in response.
external RTCSessionDescription? get remoteDescription;
/// The **`currentRemoteDescription`** read-only property of the
/// [RTCPeerConnection] interface returns an
/// [RTCSessionDescription] object describing the remote end of the connection
/// as it was most recently successfully negotiated since the last time the
/// [RTCPeerConnection] finished negotiating and connecting to a remote peer.
/// Also included is a list of any ICE candidates that may already have been
/// generated by the ICE agent since the offer or answer represented by the
/// description was first instantiated.
///
/// To change the `currentRemoteDescription`, call
/// [RTCPeerConnection.setRemoteDescription], which triggers a series of
/// events which leads to this value being set.
/// For details on what exactly happens and why the change isn't necessarily
/// instantaneous, see
/// [Pending and current descriptions](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Connectivity#pending_and_current_descriptions)
/// in the WebRTC Connectivity page.
///
/// > [!NOTE]
/// > Unlike [RTCPeerConnection.remoteDescription], this value represents the
/// > actual current state of the local end of the connection;
/// > `remoteDescription` may specify a description which the connection is
/// > currently in the process of switching over to.
external RTCSessionDescription? get currentRemoteDescription;
/// The **`pendingRemoteDescription`** read-only property of the
/// [RTCPeerConnection] interface returns an [RTCSessionDescription] object
/// describing a pending configuration change for the remote end of the
/// connection.
///
/// This does not describe the connection as it currently stands, but as it
/// may exist in the near future.
/// Use [RTCPeerConnection.currentRemoteDescription] or
/// [RTCPeerConnection.remoteDescription] to get the current session
/// description for the remote endpoint.
/// For details on the difference, see
/// [Pending and current descriptions](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Connectivity#pending_and_current_descriptions)
/// in the WebRTC Connectivity page.
external RTCSessionDescription? get pendingRemoteDescription;
/// The **`signalingState`** read-only property of the [RTCPeerConnection]
/// interface returns a string value describing the state of the signaling
/// process on the local end of the connection while connecting or
/// reconnecting to another peer.
/// See
/// [Signaling](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Session_lifetime#signaling)
/// in our WebRTC session lifetime page.
///
/// Because the signaling process is a state machine, being able to verify
/// that your code is in the expected state when messages arrive can help
/// avoid unexpected and avoidable failures.
/// For example, if you receive an answer while the `signalingState` isn't
/// `"have-local-offer"`, you know that something is wrong, since you should
/// only receive answers after creating an offer but before an answer has been
/// received and passed into [RTCPeerConnection.setLocalDescription]. Your
/// code will be more reliable if you watch for mismatched states like this
/// and handle them gracefully.
///
/// This value may also be useful during debugging, for example.
///
/// In addition, when the value of this property changes, a
/// [RTCPeerConnection.signalingstatechange_event] event is sent to the
/// [RTCPeerConnection] instance.
external RTCSignalingState get signalingState;
/// The **`iceGatheringState`** read-only property of the [RTCPeerConnection]
/// interface returns a string that describes the overall ICE gathering state
/// for this connection.
/// This lets you detect, for example, when collection of ICE candidates has
/// finished.
///
/// You can detect when the value of this property changes by watching for an
/// event of type [RTCPeerConnection.icegatheringstatechange_event].
///
/// Note that **`iceGatheringState`** represents the overall gathering state
/// of the connection, including every [RTCIceTransport] used by every
/// [RTCRtpSender] and every [RTCRtpReceiver] on the entire connection.
/// This contrasts with [RTCIceTransport.gatheringState], which represents the
/// gathering state for a single transport.
external RTCIceGatheringState get iceGatheringState;
/// The **`iceConnectionState`** read-only property of the [RTCPeerConnection]
/// interface returns a string which state of the agent associated with the
/// [RTCPeerConnection]: `new`, `checking`, `connected`, `completed`,
/// `failed`, `disconnected`, and `closed`.
///
/// It describes the current state of the ICE agent and its connection to the
/// ICE server;
/// that is, the or server.
///
/// You can detect when this value has changed by watching for the
/// [RTCPeerConnection.iceconnectionstatechange_event] event.
external RTCIceConnectionState get iceConnectionState;
/// The **`connectionState`** read-only property of the [RTCPeerConnection]
/// interface indicates the current state of the peer connection by returning
/// one of the following string values: `new`, `connecting`, `connected`,
/// `disconnected`, `failed`, or `closed`.
///
/// This state essentially represents the aggregate state of all ICE
/// transports (which are of type [RTCIceTransport] or [RTCDtlsTransport])
/// being used by the connection.
///
/// When this property's value changes, a
/// [RTCPeerConnection.connectionstatechange_event] event is sent to the
/// [RTCPeerConnection] instance.
external RTCPeerConnectionState get connectionState;
/// The **`canTrickleIceCandidates`** read-only property of the
/// [RTCPeerConnection] interface returns a boolean value which indicates
/// whether or not the remote peer can accept
/// [trickled ICE candidates](https://datatracker.ietf.org/doc/html/draft-ietf-mmusic-trickle-ice).
///
/// **ICE trickling** is the process of continuing to send candidates after
/// the initial offer or answer has already been sent to the other peer.
///
/// This property is only set after having called
/// [RTCPeerConnection.setRemoteDescription]. Ideally, your signaling protocol
/// provides a way to detect trickling support, so that you don't need to rely
/// on this property.
/// A WebRTC browser will always support trickle ICE. If trickling isn't
/// supported, or you aren't able to tell, you can check for a falsy value for
/// this property and then wait until the value of
/// [RTCPeerConnection.iceGatheringState] changes to `"completed"` before
/// creating and sending the initial offer.
/// That way, the offer contains all of the candidates.
external bool? get canTrickleIceCandidates;
external EventHandler get onnegotiationneeded;
external set onnegotiationneeded(EventHandler value);
external EventHandler get onicecandidate;
external set onicecandidate(EventHandler value);
external EventHandler get onicecandidateerror;
external set onicecandidateerror(EventHandler value);
external EventHandler get onsignalingstatechange;
external set onsignalingstatechange(EventHandler value);
external EventHandler get oniceconnectionstatechange;
external set oniceconnectionstatechange(EventHandler value);
external EventHandler get onicegatheringstatechange;
external set onicegatheringstatechange(EventHandler value);
external EventHandler get onconnectionstatechange;
external set onconnectionstatechange(EventHandler value);
/// The **`peerIdentity`** read-only property of the [RTCPeerConnection]
/// interface returns a JavaScript `Promise` that resolves to an
/// [RTCIdentityAssertion] which contains a string identifying the remote
/// peer.
/// Once this promise resolves successfully, the resulting identity is the
/// **target peer identity** and cannot change for the duration of the
/// connection.
external JSPromise<JSObject> get peerIdentity;
external String? get idpLoginUrl;
external EventHandler get ontrack;
external set ontrack(EventHandler value);
/// The **`sctp`** read-only property of the [RTCPeerConnection] interface
/// returns an [RTCSctpTransport] describing the transport over which SCTP
/// data is being sent and received.
/// If SCTP hasn't been negotiated, this value is `null`.
///
/// The SCTP transport is used for transmitting and receiving data for any and
/// all [RTCDataChannel]s on the peer connection.
external RTCSctpTransport? get sctp;
external EventHandler get ondatachannel;
external set ondatachannel(EventHandler value);
}
/// The **`RTCSessionDescription`** interface describes one end of a
/// connection—or potential connection—and how it's configured. Each
/// `RTCSessionDescription` consists of a description
/// [RTCSessionDescription.type] indicating which part of the offer/answer
/// negotiation process it describes and of the descriptor of the session.
///
/// The process of negotiating a connection between two peers involves
/// exchanging `RTCSessionDescription` objects back and forth, with each
/// description suggesting one combination of connection configuration options
/// that the sender of the description supports. Once the two peers agree upon a
/// configuration for the connection, negotiation is complete.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/RTCSessionDescription).
extension type RTCSessionDescription._(JSObject _) implements JSObject {
external factory RTCSessionDescription(
RTCSessionDescriptionInit descriptionInitDict);
/// The **`RTCSessionDescription.toJSON()`** method generates a
/// description of the object. Both properties,
/// [RTCSessionDescription.type] and
/// [RTCSessionDescription.sdp], are contained in the generated JSON.
external RTCSessionDescriptionInit toJSON();
/// The property **`RTCSessionDescription.type`** is a read-only
/// string value which describes the description's type.
external RTCSdpType get type;
/// The property **`RTCSessionDescription.sdp`** is a read-only
/// string containing the which describes the session.
external String get sdp;
}
extension type RTCSessionDescriptionInit._(JSObject _) implements JSObject {
external factory RTCSessionDescriptionInit({
required RTCSdpType type,
String sdp,
});
external RTCSdpType get type;
external set type(RTCSdpType value);
external String get sdp;
external set sdp(String value);
}
extension type RTCLocalSessionDescriptionInit._(JSObject _)
implements JSObject {
external factory RTCLocalSessionDescriptionInit({
RTCSdpType type,
String sdp,
});
external RTCSdpType get type;
external set type(RTCSdpType value);
external String get sdp;
external set sdp(String value);
}
/// The **`RTCIceCandidate`** interface—part of the
/// [WebRTC API](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API)—represents
/// a candidate Interactive Connectivity Establishment () configuration which
/// may be used to establish an [RTCPeerConnection].
///
/// An ICE candidate describes the protocols and routing needed for WebRTC to be
/// able to communicate with a remote device. When starting a WebRTC peer
/// connection, typically a number of candidates are proposed by each end of the
/// connection, until they mutually agree upon one which describes the
/// connection they decide will be best. WebRTC then uses that candidate's
/// details to initiate the connection.
///
/// For details on how the ICE process works, see
/// [Lifetime of a WebRTC session](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Session_lifetime).
/// The article
/// [WebRTC connectivity](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Connectivity)
/// provides additional useful details.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/RTCIceCandidate).
extension type RTCIceCandidate._(JSObject _) implements JSObject {
external factory RTCIceCandidate([RTCIceCandidateInit candidateInitDict]);
/// The [RTCIceCandidate] method **`toJSON()`** converts the `RTCIceCandidate`
/// on which it's called into JSON.
///
/// A stringified version of the object can then be obtained by calling
/// `stringify()` on the returned object.
external RTCIceCandidateInit toJSON();
/// The read-only property **`candidate`** on the [RTCIceCandidate] interface
/// returns a string describing the candidate in detail.
/// Most of the other properties of `RTCIceCandidate` are actually extracted
/// from this string.
///
/// This property can be configured using the `candidate` property of the
/// object passed into the [RTCIceCandidate.RTCIceCandidate] constructor or
/// [RTCPeerConnection.addIceCandidate].
external String get candidate;
/// The read-only property **`sdpMid`** on the [RTCIceCandidate] interface
/// returns a string
/// specifying the media stream identification tag of the media component with
/// which the candidate is associated.
/// This ID uniquely identifies a given stream for the component with which
/// the candidate is associated.
///
/// This property can be configured by specifying the value of the `sdpMid`
/// property in the `candidateInfo` options object that is passed to the
/// [RTCIceCandidate.RTCIceCandidate] constructor.
/// If you call the constructor with an m-line string instead of the options
/// object, the value of `sdpMid` is extracted from the specified candidate
/// m-line string.
external String? get sdpMid;
/// The read-only **`sdpMLineIndex`** property on the [RTCIceCandidate]
/// interface
/// is a zero-based index of the m-line describing the media associated with
/// the candidate.
///
/// This property can be configured by specifying the value of the
/// `sdpMLineIndex` property in the `candidateInfo` options object that is
/// passed to the [RTCIceCandidate.RTCIceCandidate] constructor.
/// If you call the constructor with an m-line string instead of the options
/// object, the value of `sdpMLineIndex` is extracted from the specified
/// candidate m-line string.
external int? get sdpMLineIndex;
/// The **[RTCIceCandidate]**
/// interface's read-only **`foundation`** property is a string
/// which uniquely identifies the candidate across multiple transports.
///
/// The `foundation` can therefore be used to correlate candidates that are
/// present on
/// multiple [RTCIceTransport] objects
external String? get foundation;
/// The read-only **`component`** property
/// on the [RTCIceCandidate] interface is a string which indicates whether
/// the candidate is an
/// [RTP](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Intro_to_RTP)
/// or
/// an RTCP candidate.
///
/// If a candidate represents both RTP and RTCP multiplexed together, it is
/// reported as an
/// RTP candidate.
external RTCIceComponent? get component;
/// The **[RTCIceCandidate]** interface's read-only **`priority`** property
/// specifies the candidate's priority according to the remote peer; the
/// higher this value is, the better the remote peer considers the candidate
/// to be.
///
/// The `priority` field's value is set from the `candidateInfo` options
/// object passed to the [RTCIceCandidate.RTCIceCandidate] constructor.
/// You can't specify the value of `priority` directly in the options object,
/// but its value is automatically extracted from the object's `candidate`
/// a-line, if it's formatted properly.
external int? get priority;
/// The **[RTCIceCandidate]** interface's read-only **`address`** property is
/// a string providing the IP address of the device which is the source of the
/// candidate.
/// The `address` is `null` by default if not otherwise specified.
///
/// The `address` field's value is set from the `candidateInfo` options object
/// passed to the [RTCIceCandidate.RTCIceCandidate] constructor.
/// You can't specify the value of `address` directly in the options object,
/// but its value is automatically extracted from the object's `candidate`
/// a-line, if it's formatted properly.
external String? get address;
/// The **[RTCIceCandidate]** interface's read-only **`protocol`** property is
/// a string
/// which indicates whether the candidate uses or as its transport protocol.
///
/// The `protocol` field's value is set from the `candidateInfo` options
/// object passed to the [RTCIceCandidate.RTCIceCandidate] constructor.
/// You can't specify the value of `protocol` directly in the options object,
/// but its value is automatically extracted from the object's `candidate`
/// a-line, if it's formatted properly.
///
/// `protocol` is `null` by default if not specified properly in the SDP, but
/// this is an error condition and will result in a thrown exception when you
/// call [RTCPeerConnection.addIceCandidate].
external RTCIceProtocol? get protocol;
/// The **[RTCIceCandidate]** interface's read-only **`port`** property
/// contains the port
/// number on the device at the address given by [RTCIceCandidate.address] at
/// which the candidate's peer can be reached.
///
/// The `port` field's value is set from the `candidateInfo` options object
/// passed to the [RTCIceCandidate.RTCIceCandidate] constructor.
/// You can't specify the value of `port` directly in the options object, but
/// its value is automatically extracted from the object's `candidate` a-line,
/// if it's formatted properly.
external int? get port;
/// The **[RTCIceCandidate]** interface's read-only **`type`** specifies the
/// type of candidate the object represents.
///
/// The `type` field's value is set from the `candidateInfo` options object
/// passed to the [RTCIceCandidate.RTCIceCandidate] constructor.
/// You can't specify the value of `type` directly in the options object, but
/// its value is automatically extracted from the object's `candidate` a-line
/// (the `cand-type` field), if it's formatted properly.
external RTCIceCandidateType? get type;
/// The **[RTCIceCandidate]** interface's read-only **`tcpType`** property is
/// included on TCP candidates to provide additional details about the
/// candidate type.
///
/// The `tcpType` field's value is set from the `candidateInfo` options object
/// passed to the [RTCIceCandidate.RTCIceCandidate] constructor.
/// You can't specify the value of `tcpType` directly in the options object,
/// but its value is automatically extracted from the object's `candidate`
/// a-line, if it's formatted properly.
external RTCIceTcpCandidateType? get tcpType;
/// The **[RTCIceCandidate]** interface's read-only **`relatedAddress`**
/// property is a string indicating the **related address** of a relay or
/// reflexive candidate.
///
/// If the candidate is a host candidate (that is, its
/// [RTCIceCandidate.address] is in fact the real IP address of the remote
/// peer), `relatedAddress` is `null`.
///
/// The `relatedAddress` field's value is set from the `candidateInfo` options
/// object passed to the [RTCIceCandidate.RTCIceCandidate] constructor.
/// You can't specify the value of `relatedAddress` directly in the options
/// object, but its value is automatically extracted from the object's
/// `candidate` a-line if it's formatted properly(the `rel-address` field).
///
/// The related address and port ([RTCIceCandidate.relatedPort]) are not used
/// at all by itself; they are provided for analysis and diagnostic purposes
/// only, and their inclusion may be blocked by security systems, so do not
/// rely on them having non-`null` values.
external String? get relatedAddress;
/// The **[RTCIceCandidate]** interface's read-only **`relatedPort`** property
/// indicates the port number of reflexive or relay candidates.
///
/// If the candidate is a host candidate (that is, its
/// [RTCIceCandidate.address] is in fact the real IP address of the remote
/// peer), `relatedPort` is `null`.
///
/// The `relatedPort` field's value is set from the `candidateInfo` options
/// object passed to the [RTCIceCandidate.RTCIceCandidate] constructor.
/// You can't specify the value of `relatedPort` directly in the options
/// object, but its value is automatically extracted from the object's
/// `candidate` a-line, if it's formatted properly (the `rel-port` field).
///
/// The related address ([RTCIceCandidate.relatedAddress]) and port are not
/// used at all by itself; they are provided for
/// analysis and diagnostic purposes only, and their inclusion may be blocked
/// by security systems, so do not rely on them having non-`null` values.
external int? get relatedPort;
/// The read-only **`usernameFragment`** property on the [RTCIceCandidate]
/// interface is a string indicating the
/// username fragment ("ufrag") that uniquely identifies a single ICE
/// interaction session.
///
/// This value is specified using the `usernameFragment` property in the
/// `candidateInfo` options object that is passed to the
/// [RTCIceCandidate.RTCIceCandidate] constructor.
/// If you call the constructor with an m-line string instead of the options
/// object, the value of `usernameFragment` is extracted from the specified
/// candidate m-line string.
///
/// Note that 24 bits of the username fragment are required to be randomized
/// by the browser. See [Randomization](#randomization) below for details.
external String? get usernameFragment;
}
extension type RTCIceCandidateInit._(JSObject _) implements JSObject {
external factory RTCIceCandidateInit({
String candidate,
String? sdpMid,
int? sdpMLineIndex,
String? usernameFragment,
});
external String get candidate;
external set candidate(String value);
external String? get sdpMid;
external set sdpMid(String? value);
external int? get sdpMLineIndex;
external set sdpMLineIndex(int? value);
external String? get usernameFragment;
external set usernameFragment(String? value);
}
/// The **`RTCPeerConnectionIceEvent`** interface represents events that occur
/// in relation to candidates with the target, usually an [RTCPeerConnection].
///
/// Only one event is of this type: [RTCPeerConnection.icecandidate_event].
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnectionIceEvent).
extension type RTCPeerConnectionIceEvent._(JSObject _)
implements Event, JSObject {
external factory RTCPeerConnectionIceEvent(
String type, [
RTCPeerConnectionIceEventInit eventInitDict,
]);
/// The read-only **`candidate`** property
/// of the [RTCPeerConnectionIceEvent] interface returns the
/// [RTCIceCandidate] associated with the event.
external RTCIceCandidate? get candidate;
external String? get url;
}
extension type RTCPeerConnectionIceEventInit._(JSObject _)
implements EventInit, JSObject {
external factory RTCPeerConnectionIceEventInit({
bool bubbles,
bool cancelable,
bool composed,
RTCIceCandidate? candidate,
String? url,
});
external RTCIceCandidate? get candidate;
external set candidate(RTCIceCandidate? value);
external String? get url;
external set url(String? value);
}
/// The **`RTCPeerConnectionIceErrorEvent`** interface—based upon the [Event]
/// interface—provides details pertaining to an error announced by sending an
/// [RTCPeerConnection.icecandidateerror_event] event to the [RTCPeerConnection]
/// object.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnectionIceErrorEvent).
extension type RTCPeerConnectionIceErrorEvent._(JSObject _)
implements Event, JSObject {
external factory RTCPeerConnectionIceErrorEvent(
String type,
RTCPeerConnectionIceErrorEventInit eventInitDict,
);
/// The [RTCPeerConnectionIceErrorEvent] property
/// **`address`** is a string which indicates the local IP address
/// being used to communicate with the or server
/// during negotiations. The error which occurred involved this address.
external String? get address;
external int? get port;
external String get url;
external int get errorCode;
external String get errorText;
}
extension type RTCPeerConnectionIceErrorEventInit._(JSObject _)
implements EventInit, JSObject {
external factory RTCPeerConnectionIceErrorEventInit({
bool bubbles,
bool cancelable,
bool composed,
String? address,
int? port,
String url,
required int errorCode,
String errorText,
});
external String? get address;
external set address(String? value);
external int? get port;
external set port(int? value);
external String get url;
external set url(String value);
external int get errorCode;
external set errorCode(int value);
external String get errorText;
external set errorText(String value);
}
/// The **`RTCCertificate`** interface of the
/// [WebRTC API](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API)
/// provides an object representing a certificate that an [RTCPeerConnection]
/// uses to authenticate.
///
/// `RTCCertificate` is a , so it can be cloned with [Window.structuredClone] or
/// copied between
/// [Workers](https://developer.mozilla.org/en-US/docs/Web/API/Worker) using
/// [Worker.postMessage].
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/RTCCertificate).
extension type RTCCertificate._(JSObject _) implements JSObject {
/// The **`getFingerprints()`** method of the **[RTCCertificate]** interface
/// is used to get an array of certificate fingerprints.
///
/// An application can use this method to compare the client certificate
/// fingerprints with the certificate fingerprints from the server.
/// The server and client may support different sets of algorithms: all
/// fingerprint values for the set of algorithms supported by both client and
/// server should match.
external JSArray<RTCDtlsFingerprint> getFingerprints();
/// The read-only **`expires`** property of the [RTCCertificate] interface
/// returns the expiration date of the certificate.
///
/// By default a new certificate is configured with `expires` set to a value
/// of 2592000000 milliseconds, or 30 days.
/// The expiration time cannot exceed 31536000000 milliseconds, or 365 days.
/// It's also useful to note that browsers may further restrict the expiration
/// time of certificates if they choose.
external EpochTimeStamp get expires;
}
extension type RTCRtpTransceiverInit._(JSObject _) implements JSObject {
external factory RTCRtpTransceiverInit({
RTCRtpTransceiverDirection direction,
JSArray<MediaStream> streams,
JSArray<RTCRtpEncodingParameters> sendEncodings,
});
external RTCRtpTransceiverDirection get direction;
external set direction(RTCRtpTransceiverDirection value);
external JSArray<MediaStream> get streams;
external set streams(JSArray<MediaStream> value);
external JSArray<RTCRtpEncodingParameters> get sendEncodings;
external set sendEncodings(JSArray<RTCRtpEncodingParameters> value);
}
/// The **`RTCRtpSender`** interface provides the ability to control and obtain
/// details about how a particular [MediaStreamTrack] is encoded and sent to a
/// remote peer.
///
/// With it, you can configure the encoding used for the corresponding track,
/// get information about the device's media capabilities, and so forth. You can
/// also obtain access to an [RTCDTMFSender] which can be used to send codes
/// (to simulate the user pressing buttons on a telephone's dial pad) to the
/// remote peer.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/RTCRtpSender).
extension type RTCRtpSender._(JSObject _) implements JSObject {
/// The _static method_ **`RTCRtpSender.getCapabilities()`** returns an object
/// describing the codec and header extension capabilities supported by the
/// [RTCRtpSender].
///
/// You can, similarly, obtain the capabilities of [RTCRtpReceiver] objects on
/// the device by calling the static function
/// [RTCRtpReceiver.getCapabilities_static].
external static RTCRtpCapabilities? getCapabilities(String kind);
/// The **`setParameters()`** method of the [RTCRtpSender] interface applies
/// changes the configuration of sender's [RTCRtpSender.track], which is the
/// [MediaStreamTrack] for which the `RTCRtpSender` is responsible.
///
/// In other words, `setParameters()` updates the configuration of the
/// transmission as well as the encoding configuration for a specific outgoing
/// media track on the
/// [WebRTC](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API)
/// connection.
external JSPromise<JSAny?> setParameters(
RTCRtpSendParameters parameters, [
RTCSetParameterOptions setParameterOptions,
]);
/// The **`getParameters()`** method of the [RTCRtpSender] interface returns
/// an object describing the current configuration for how the sender's
/// [RTCRtpSender.track] will be encoded and transmitted to a remote
/// [RTCRtpReceiver].
external RTCRtpSendParameters getParameters();
/// The [RTCRtpSender] method
/// **`replaceTrack()`** replaces the track currently being used
/// as the sender's source with a new [MediaStreamTrack].
///
/// The new
/// track must be of the same media kind (audio, video, etc.) and switching
/// the track should
/// not require negotiation.
///
/// Among the use cases for `replaceTrack()` is the common need to switch
/// between the rear- and front-facing cameras on a phone. With
/// `replaceTrack()`,
/// you can have a track object for each camera and switch between the two as
/// needed. See
/// the example [switching video cameras](#switching_video_cameras) below.
external JSPromise<JSAny?> replaceTrack(MediaStreamTrack? withTrack);
/// The [RTCRtpSender] method **`setStreams()`** associates the sender's
/// [RTCRtpSender.track] with the specified [MediaStream] objects.
external void setStreams([
MediaStream stream1,
MediaStream stream2,
MediaStream stream3,
MediaStream stream4,
]);
/// The [RTCRtpSender] method **`getStats()`** asynchronously requests an
/// [RTCStatsReport] object which provides statistics about outgoing traffic
/// on the [RTCPeerConnection] which owns the sender, returning a `Promise`
/// which is fulfilled when the results are available.
external JSPromise<RTCStatsReport> getStats();
/// The **`track`** read-only property of
/// the [RTCRtpSender] interface returns the [MediaStreamTrack]
/// which is being handled by the `RTCRtpSender`.
external MediaStreamTrack? get track;
/// The read-only **`transport`** property of an
/// [RTCRtpSender] object provides the [RTCDtlsTransport] object
/// used to interact with the underlying transport over which the sender is
/// exchanging
/// Real-time Transport Control Protocol () packets.
///
/// This transport is responsible for receiving the data for the media on the
/// sender's
/// [RTCRtpReceiver.track].
external RTCDtlsTransport? get transport;
/// The **`transform`** property of the [RTCRtpSender] object is used to
/// insert a transform stream ([TransformStream]) running in a worker thread
/// into the sender pipeline.
/// This allows stream transforms to be applied to encoded video and audio
/// frames after they are output by a codec, and before they are sent.
///
/// The transform that is to be added is defined using an
/// [RTCRtpScriptTransform] and its associated [Worker].
/// If the transform is set synchronously immediately after creating the
/// `RTCRtpSender` it will receive the first full frame generated by the
/// sender's encoder.
///
/// ### Value
///
/// A [RTCRtpScriptTransform]<!-- or [SFrameTransform] -->, or `null` if the
/// sender has no associated transform stream.
external RTCRtpTransform? get transform;
external set transform(RTCRtpTransform? value);
/// The read-only **`dtmf`** property on the
/// **[RTCRtpSender]** interface returns a
/// [RTCDTMFSender] object which can be used to send tones
/// over the [RTCPeerConnection]. See
/// [Using DTMF](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Using_DTMF)
/// for details on how to
/// make use of the returned `RTCDTMFSender` object.
external RTCDTMFSender? get dtmf;
}
extension type RTCRtpParameters._(JSObject _) implements JSObject {
external factory RTCRtpParameters({
required JSArray<RTCRtpHeaderExtensionParameters> headerExtensions,
required RTCRtcpParameters rtcp,
required JSArray<RTCRtpCodecParameters> codecs,
});
external JSArray<RTCRtpHeaderExtensionParameters> get headerExtensions;
external set headerExtensions(JSArray<RTCRtpHeaderExtensionParameters> value);
external RTCRtcpParameters get rtcp;
external set rtcp(RTCRtcpParameters value);
external JSArray<RTCRtpCodecParameters> get codecs;
external set codecs(JSArray<RTCRtpCodecParameters> value);
}
extension type RTCRtpSendParameters._(JSObject _)
implements RTCRtpParameters, JSObject {
external factory RTCRtpSendParameters({
required JSArray<RTCRtpHeaderExtensionParameters> headerExtensions,
required RTCRtcpParameters rtcp,
required JSArray<RTCRtpCodecParameters> codecs,
required String transactionId,
required JSArray<RTCRtpEncodingParameters> encodings,
RTCDegradationPreference degradationPreference,
});
external String get transactionId;
external set transactionId(String value);
external JSArray<RTCRtpEncodingParameters> get encodings;
external set encodings(JSArray<RTCRtpEncodingParameters> value);
external RTCDegradationPreference get degradationPreference;
external set degradationPreference(RTCDegradationPreference value);
}
extension type RTCRtpReceiveParameters._(JSObject _)
implements RTCRtpParameters, JSObject {
external factory RTCRtpReceiveParameters({
required JSArray<RTCRtpHeaderExtensionParameters> headerExtensions,
required RTCRtcpParameters rtcp,
required JSArray<RTCRtpCodecParameters> codecs,
});
}
extension type RTCRtpCodingParameters._(JSObject _) implements JSObject {
external factory RTCRtpCodingParameters({String rid});
external String get rid;
external set rid(String value);
}
extension type RTCRtpEncodingParameters._(JSObject _)
implements RTCRtpCodingParameters, JSObject {
external factory RTCRtpEncodingParameters({
String rid,
bool active,
RTCRtpCodec codec,
int maxBitrate,
num maxFramerate,
num scaleResolutionDownBy,
RTCPriorityType priority,
RTCPriorityType networkPriority,
String scalabilityMode,
});
external bool get active;
external set active(bool value);
external RTCRtpCodec get codec;
external set codec(RTCRtpCodec value);
external int get maxBitrate;
external set maxBitrate(int value);
external double get maxFramerate;
external set maxFramerate(num value);
external double get scaleResolutionDownBy;
external set scaleResolutionDownBy(num value);
external RTCPriorityType get priority;
external set priority(RTCPriorityType value);
external RTCPriorityType get networkPriority;
external set networkPriority(RTCPriorityType value);
external String get scalabilityMode;
external set scalabilityMode(String value);
}
extension type RTCRtcpParameters._(JSObject _) implements JSObject {
external factory RTCRtcpParameters({
String cname,
bool reducedSize,
});
external String get cname;
external set cname(String value);
external bool get reducedSize;
external set reducedSize(bool value);
}
extension type RTCRtpHeaderExtensionParameters._(JSObject _)
implements JSObject {
external factory RTCRtpHeaderExtensionParameters({
required String uri,
required int id,
bool encrypted,
});
external String get uri;
external set uri(String value);
external int get id;
external set id(int value);
external bool get encrypted;
external set encrypted(bool value);
}
extension type RTCRtpCodec._(JSObject _) implements JSObject {
external factory RTCRtpCodec({
required String mimeType,
required int clockRate,
int channels,
String sdpFmtpLine,
});
external String get mimeType;
external set mimeType(String value);
external int get clockRate;
external set clockRate(int value);
external int get channels;
external set channels(int value);
external String get sdpFmtpLine;
external set sdpFmtpLine(String value);
}
extension type RTCRtpCodecParameters._(JSObject _)
implements RTCRtpCodec, JSObject {
external factory RTCRtpCodecParameters({
required String mimeType,
required int clockRate,
int channels,
String sdpFmtpLine,
required int payloadType,
});
external int get payloadType;
external set payloadType(int value);
}
extension type RTCRtpCapabilities._(JSObject _) implements JSObject {
external factory RTCRtpCapabilities({
required JSArray<RTCRtpCodec> codecs,
required JSArray<RTCRtpHeaderExtensionCapability> headerExtensions,
});
external JSArray<RTCRtpCodec> get codecs;
external set codecs(JSArray<RTCRtpCodec> value);
external JSArray<RTCRtpHeaderExtensionCapability> get headerExtensions;
external set headerExtensions(JSArray<RTCRtpHeaderExtensionCapability> value);
}
extension type RTCRtpHeaderExtensionCapability._(JSObject _)
implements JSObject {
external factory RTCRtpHeaderExtensionCapability({required String uri});
external String get uri;
external set uri(String value);
}
extension type RTCSetParameterOptions._(JSObject _) implements JSObject {
RTCSetParameterOptions() : _ = JSObject();
}
/// The **`RTCRtpReceiver`** interface of the
/// [WebRTC API](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API)
/// manages the reception and decoding of data for a [MediaStreamTrack] on an
/// [RTCPeerConnection].
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/RTCRtpReceiver).
extension type RTCRtpReceiver._(JSObject _) implements JSObject {
/// The _static method_ **`RTCRtpReceiver.getCapabilities()`** returns an
/// object describing the codec and header extension capabilities supported by
/// [RTCRtpReceiver] objects on the current device.
///
/// You can, similarly, obtain the capabilities of [RTCRtpSender] objects by
/// calling the static function [RTCRtpSender.getCapabilities_static].
external static RTCRtpCapabilities? getCapabilities(String kind);
/// The **`getParameters()`** method of the [RTCRtpReceiver] interface returns
/// an object describing the current configuration for how the receiver's
/// [RTCRtpReceiver.track] is decoded.
external RTCRtpReceiveParameters getParameters();
/// The **`getContributingSources()`** method of the [RTCRtpReceiver]
/// interface returns an array of objects, each corresponding to one CSRC
/// (contributing source) identifier received by the current `RTCRtpReceiver`
/// in the last ten seconds.
external JSArray<RTCRtpContributingSource> getContributingSources();
/// The **`getSynchronizationSources()`** method of the [RTCRtpReceiver]
/// interface returns an array of objects, each corresponding to one SSRC
/// (synchronization source) identifier received by the current
/// `RTCRtpReceiver` in the last ten seconds.
external JSArray<RTCRtpSynchronizationSource> getSynchronizationSources();
/// The [RTCRtpReceiver] method **`getStats()`** asynchronously requests an
/// [RTCStatsReport] object which provides statistics about incoming traffic
/// on the owning [RTCPeerConnection], returning a `Promise` whose fulfillment
/// handler will be called once the results are available.
external JSPromise<RTCStatsReport> getStats();
/// The **`track`** read-only property of the
/// [RTCRtpReceiver] interface returns the [MediaStreamTrack]
/// associated with the current [RTCRtpReceiver] instance.
external MediaStreamTrack get track;
/// The read-only **`transport`** property of an
/// [RTCRtpReceiver] object provides the [RTCDtlsTransport] object
/// used to interact with the underlying transport over which the receiver is
/// exchanging
/// Real-time Transport Control Protocol () packets.
///
/// This transport is responsible for receiving the data for the media on the
/// receiver's
/// [RTCRtpReceiver.track].
external RTCDtlsTransport? get transport;
/// The **`jitterBufferTarget`** property of the [RTCRtpReceiver] interface is
/// a [DOMHighResTimeStamp] that indicates the application's preferred
/// duration, in milliseconds, for which the jitter buffer should hold media
/// before playing it out.
///
/// The application can use it to influence the tradeoff between playout delay
/// and the risk of running out of audio or video frames due to network
/// jitter.
external double? get jitterBufferTarget;
external set jitterBufferTarget(DOMHighResTimeStamp? value);
/// The **`transform`** property of the [RTCRtpReceiver] object is used to
/// insert a transform stream ([TransformStream]) running in a worker thread
/// into the receiver pipeline.
/// This allows stream transforms to be applied to encoded video and audio
/// frames as they arrive from the packetizer (before they are
/// played/rendered).
///
/// The transform that is to be added is defined using an
/// [RTCRtpScriptTransform] and its associated [Worker].
/// If the transform is set in the peer connection
/// [`track` event](https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/track_event)
/// handler, the transform stream will receive the first full incoming frame
/// for the track.
///
/// ### Value
///
/// A [RTCRtpScriptTransform]<!-- or [SFrameTransform] -->, or `null` if the
/// receiver has no associated transform stream.
external RTCRtpTransform? get transform;
external set transform(RTCRtpTransform? value);
}
extension type RTCRtpContributingSource._(JSObject _) implements JSObject {
external factory RTCRtpContributingSource({
required DOMHighResTimeStamp timestamp,
required int source,
num audioLevel,
required int rtpTimestamp,
});
external double get timestamp;
external set timestamp(DOMHighResTimeStamp value);
external int get source;
external set source(int value);
external double get audioLevel;
external set audioLevel(num value);
external int get rtpTimestamp;
external set rtpTimestamp(int value);
}
extension type RTCRtpSynchronizationSource._(JSObject _)
implements RTCRtpContributingSource, JSObject {
external factory RTCRtpSynchronizationSource({
required DOMHighResTimeStamp timestamp,
required int source,
num audioLevel,
required int rtpTimestamp,
});
}
/// The WebRTC interface **`RTCRtpTransceiver`** describes a permanent pairing
/// of an [RTCRtpSender] and an [RTCRtpReceiver], along with some shared state.
///
/// Each media section describes one bidirectional SRTP ("Secure Real Time
/// Protocol") stream (excepting the media section for [RTCDataChannel], if
/// present).
/// This pairing of send and receive SRTP streams is significant for some
/// applications, so `RTCRtpTransceiver` is used to represent this pairing,
/// along with other important state from the media section.
/// Each non-disabled SRTP media section is always represented by exactly one
/// transceiver.
///
/// A transceiver is uniquely identified using its [RTCRtpTransceiver.mid]
/// property, which is the same as the media ID (`mid`) of its corresponding
/// m-line. An `RTCRtpTransceiver` is **associated** with an m-line if its `mid`
/// is non-null; otherwise it's considered disassociated.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/RTCRtpTransceiver).
extension type RTCRtpTransceiver._(JSObject _) implements JSObject {
/// The **`stop()`** method in the [RTCRtpTransceiver] interface permanently
/// stops the transceiver by stopping both the associated [RTCRtpSender] and
/// [RTCRtpReceiver].
external void stop();
/// The **`setCodecPreferences()`** method of the [RTCRtpTransceiver]
/// interface is used to set the codecs that the transceiver allows for
/// decoding _received_ data, in order of decreasing preference.
///
/// The preferences set using this method influence what codecs are negotiated
/// with the remote peer for encoding the data that it sends, including those
/// used for retransmission, redundancy, and forward error correction.
/// Codecs that are not included in the preferences list will not be part of
/// the negotiation.
/// Note that the preferences used by this transceiver for _sending_ content
/// depend on the preferences of the remote peer.
///
/// The recommended way to set codec preferences is to first get the array of
/// codecs that are actually supported for decoding received data, then
/// reorder them your in decreasing preference order.
/// This ensures that the array is ordered as required, does not contain any
/// unsupported codecs, and also that it also contains codecs that are needed
/// for retransmission, redundancy, and forward error correction.
///
/// The specified set of codecs will be used for all future connections that
/// include this transceiver until this method is called again.
///
/// When preparing to open an [RTCPeerConnection] the codecs should be set
/// using `setCodecParameters()` _before_ calling either
/// [RTCPeerConnection.createOffer] or [RTCPeerConnection.createAnswer], as
/// these initiate the negotiation (and will use codec parameters from the
/// default configuration by default).
///
/// The codecs can be changed when you have an ongoing communication, but you
/// need to first call `setCodecParameters()` and then kick off a new
/// negotiation.
/// A WebRTC application will already have code for this in the
/// [`negotiationneeded` event handler](https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/negotiationneeded_event).
/// Note however that at time of writing the event is not automatically fired
/// when you call `setCodecParameters()`, so you will have to call
/// `onnegotiationneeded` yourself.
///
/// A guide to codecs supported by WebRTC—and each codec's positive and
/// negative characteristics—can be found in
/// [Codecs used by WebRTC](https://developer.mozilla.org/en-US/docs/Web/Media/Guides/Formats/WebRTC_codecs).
external void setCodecPreferences(JSArray<RTCRtpCodec> codecs);
/// The read-only [RTCRtpTransceiver] interface's
/// **`mid`** property specifies the negotiated media ID
/// (`mid`) which the local and remote peers have agreed upon to uniquely
/// identify the stream's pairing of sender and receiver.
external String? get mid;
/// The read-only **`sender`** property
/// of WebRTC's [RTCRtpTransceiver] interface indicates the
/// [RTCRtpSender] responsible for encoding and sending outgoing media data
/// for the transceiver's stream.
external RTCRtpSender get sender;
/// The read-only **`receiver`** property
/// of WebRTC's [RTCRtpTransceiver] interface indicates the
/// [RTCRtpReceiver] responsible for receiving and decoding incoming media
/// data for the transceiver's stream.
external RTCRtpReceiver get receiver;
/// The [RTCRtpTransceiver] property **`direction`** is a string that
/// indicates the transceiver's _preferred_ directionality.
///
/// The directionality indicates whether the transceiver will offer to send
/// and/or receive data, or whether it is inactive or stopped (terminated).
/// When setting the transceiver's direction, the value is not applied
/// immediately.
/// The _current_ direction is indicated by the
/// [RTCRtpTransceiver.currentDirection] property.
external RTCRtpTransceiverDirection get direction;
external set direction(RTCRtpTransceiverDirection value);
/// The read-only [RTCRtpTransceiver] property **`currentDirection`** is a
/// string which indicates the current negotiated directionality of the
/// transceiver.
///
/// The directionality indicates whether the transceiver will offer to send
/// and/or receive data, or whether it is inactive or stopped and won't send
/// or receive data.
///
/// The transceiver's preferred directionality can be set and read using the
/// [RTCRtpTransceiver.direction] property.
/// Changing the `direction` triggers a renegotiation, which may eventually
/// result in the `currentDirection` also changing.
external RTCRtpTransceiverDirection? get currentDirection;
}
/// The **`RTCDtlsTransport`** interface provides access to information about
/// the Datagram Transport Layer Security (****) transport over which a
/// [RTCPeerConnection]'s and packets are sent and received by its
/// [RTCRtpSender] and [RTCRtpReceiver] objects.
///
/// A `RTCDtlsTransport` object is also used to provide information about
/// packets transmitted and received by a connection's
/// [data channels](https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel).
///
/// Features of the DTLS transport include the addition of security to the
/// underlying transport; the `RTCDtlsTransport` interface can be used to obtain
/// information about the underlying transport and the security added to it by
/// the DTLS layer.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/RTCDtlsTransport).
extension type RTCDtlsTransport._(JSObject _) implements EventTarget, JSObject {
external JSArray<JSArrayBuffer> getRemoteCertificates();
/// The **`iceTransport`** read-only property of the **[RTCDtlsTransport]**
/// interface contains a reference to the underlying [RTCIceTransport].
external RTCIceTransport get iceTransport;
/// The **`state`** read-only property of the
/// [RTCDtlsTransport] interface provides information which describes a
/// Datagram Transport Layer Security (****) transport state.
external RTCDtlsTransportState get state;
external EventHandler get onstatechange;
external set onstatechange(EventHandler value);
external EventHandler get onerror;
external set onerror(EventHandler value);
}
extension type RTCDtlsFingerprint._(JSObject _) implements JSObject {
external factory RTCDtlsFingerprint({
String algorithm,
String value,
});
external String get algorithm;
external set algorithm(String value);
external String get value;
external set value(String value);
}
/// The **`RTCIceTransport`** interface provides access to information about the
/// transport layer over which the data is being sent and received.
/// This is particularly useful if you need to access state information about
/// the connection.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/RTCIceTransport).
extension type RTCIceTransport._(JSObject _) implements EventTarget, JSObject {
/// The **`getLocalCandidates()`** method of the [RTCIceTransport] interface
/// returns an array of [RTCIceCandidate] objects, one for each of the
/// candidates that have been gathered by the local device during the current
/// agent session.
///
/// The local candidates are placed in this list by the ICE agent prior to
/// being delivered to the local client's code in an
/// [RTCPeerConnection.icecandidate_event] event so that the client can
/// forward the candidates to the remote peer.
external JSArray<RTCIceCandidate> getLocalCandidates();
/// The **`getRemoteCandidates()`** method of the [RTCIceTransport] interface
/// returns an array that contains one [RTCIceCandidate] for each of the
/// candidates that have been received from the remote peer so far during the
/// current gathering session.
///
/// Each time your signaling code calls [RTCPeerConnection.addIceCandidate] to
/// add a received candidate to the ICE session, the ICE agent places it in
/// the list returned by this function.
external JSArray<RTCIceCandidate> getRemoteCandidates();
/// The **`getSelectedCandidatePair()`** method of the [RTCIceTransport]
/// interface returns an [RTCIceCandidatePair] object containing the current
/// best-choice pair of candidates describing the configuration of the
/// endpoints of the transport.
external JSObject? getSelectedCandidatePair();
/// The **`getLocalParameters()`** method of the [RTCIceTransport] interface
/// returns an [RTCIceParameters] object that provides information uniquely
/// identifying the local peer for the duration of the ICE session.
///
/// The local peer's parameters are obtained during ICE signaling and
/// delivered to the transport when the client calls
/// [RTCPeerConnection.setLocalDescription].
external RTCIceParameters? getLocalParameters();
/// The **`getRemoteParameters()`** method of the [RTCIceTransport] interface
/// returns an [RTCIceParameters] object that provides information uniquely
/// identifying the remote peer for the duration of the ICE session.
///
/// The remote peer's parameters are received during ICE signaling and
/// delivered to the transport when the client calls
/// [RTCPeerConnection.setRemoteDescription].
external RTCIceParameters? getRemoteParameters();
/// The **`role`** read-only property of the [RTCIceTransport] interface
/// indicates which role the transport is fulfilling: that of the controlling
/// agent, or the agent that is being controlled.
///
/// You can learn more about ICE roles in
/// [Choosing a candidate pair](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Connectivity#choosing_a_candidate_pair).
external RTCIceRole get role;
/// The **`state`** read-only property of the [RTCIceTransport] interface
/// returns the current state of the ICE transport, so you can determine the
/// state of ICE gathering in which the ICE agent currently is operating.
///
/// This differs from the [RTCIceTransport.gatheringState], which only
/// indicates whether or not ICE gathering is currently underway.
/// It also differs from [RTCPeerConnection.connectionState], which aggregates
/// the states across every [RTCIceTransport] used by every [RTCRtpSender] and
/// every [RTCRtpReceiver] on the entire connection.
external RTCIceTransportState get state;
/// The **`gatheringState`** read-only property of the [RTCIceTransport]
/// interface returns a string that indicates the current gathering state of
/// the ICE agent for this transport: `"new"`, `"gathering"`, or `"complete"`.
///
/// You can detect when the value of this property changes by watching for an
/// event of type [RTCIceTransport.gatheringstatechange_event].
///
/// Note that **`gatheringState`** represents the gathering state of just this
/// transport, while [RTCPeerConnection.iceGatheringState] represents the
/// overall gathering state of the whole connection, including every
/// [RTCIceTransport] used by every [RTCRtpSender] and every [RTCRtpReceiver]
/// on the entire connection.
external RTCIceGathererState get gatheringState;
external EventHandler get onstatechange;
external set onstatechange(EventHandler value);
external EventHandler get ongatheringstatechange;
external set ongatheringstatechange(EventHandler value);
external EventHandler get onselectedcandidatepairchange;
external set onselectedcandidatepairchange(EventHandler value);
external EventHandler get onerror;
external set onerror(EventHandler value);
external EventHandler get onicecandidate;
external set onicecandidate(EventHandler value);
}
/// The **`RTCIceParameters`** dictionary specifies the username fragment and
/// password assigned to an session.
///
/// During ICE negotiation, each peer's username fragment and password are
/// recorded in an `RTCIceParameters` object, which can be obtained from the
/// [RTCIceTransport] by calling its [RTCIceTransport.getLocalParameters] or
/// [RTCIceTransport.getRemoteParameters] method, depending on which end
/// interests you.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/RTCIceParameters).
extension type RTCIceParameters._(JSObject _) implements JSObject {
external factory RTCIceParameters({
String usernameFragment,
String password,
bool iceLite,
});
/// The **[RTCIceParameters]** dictionary's
/// **`usernameFragment`** property specifies the username fragment
/// ("ufrag") that uniquely identifies the corresponding ICE session for the
/// duration of the
/// current ICE session.
external String get usernameFragment;
external set usernameFragment(String value);
/// The **[RTCIceParameters]**
/// dictionary's **`password`** property specifies the ICE
/// password that, in tandem with the [RTCIceParameters.usernameFragment],
/// uniquely identifies an ICE session for its entire
/// duration.
external String get password;
external set password(String value);
external bool get iceLite;
external set iceLite(bool value);
}
/// The
/// [WebRTC API](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API)
/// interface **`RTCTrackEvent`** represents the [RTCPeerConnection.track_event]
/// event, which is sent when a new [MediaStreamTrack] is added to an
/// [RTCRtpReceiver] which is part of the [RTCPeerConnection].
///
/// The target is the `RTCPeerConnection` object to which the track is being
/// added.
///
/// This event is sent by the WebRTC layer to the website or application, so you
/// will not typically need to instantiate an `RTCTrackEvent` yourself.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/RTCTrackEvent).
extension type RTCTrackEvent._(JSObject _) implements Event, JSObject {
external factory RTCTrackEvent(
String type,
RTCTrackEventInit eventInitDict,
);
/// The read-only **`receiver`** property
/// of the [RTCTrackEvent] interface indicates the
/// [RTCRtpReceiver] which is used to receive data containing media for the
/// [RTCTrackEvent.track] to which the event refers.
external RTCRtpReceiver get receiver;
/// The
/// [WebRTC API](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API)
/// interface [RTCTrackEvent]'s read-only **`track`**
/// property specifies the [MediaStreamTrack] that has been added to the
/// [RTCPeerConnection].
external MediaStreamTrack get track;
/// The
/// [WebRTC API](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API)
/// interface [RTCTrackEvent]'s read-only
/// **`streams`** property specifies an array of
/// [MediaStream] objects, one for each of the streams that comprise the
/// track being added to the [RTCPeerConnection].
external JSArray<MediaStream> get streams;
/// The WebRTC API interface [RTCTrackEvent]'s
/// read-only **`transceiver`** property indicates the
/// [RTCRtpTransceiver] affiliated with the event's
/// [RTCTrackEvent.track].
///
/// The transceiver pairs the track's
/// [RTCTrackEvent.receiver] with an [RTCRtpSender].
external RTCRtpTransceiver get transceiver;
}
extension type RTCTrackEventInit._(JSObject _) implements EventInit, JSObject {
external factory RTCTrackEventInit({
bool bubbles,
bool cancelable,
bool composed,
required RTCRtpReceiver receiver,
required MediaStreamTrack track,
JSArray<MediaStream> streams,
required RTCRtpTransceiver transceiver,
});
external RTCRtpReceiver get receiver;
external set receiver(RTCRtpReceiver value);
external MediaStreamTrack get track;
external set track(MediaStreamTrack value);
external JSArray<MediaStream> get streams;
external set streams(JSArray<MediaStream> value);
external RTCRtpTransceiver get transceiver;
external set transceiver(RTCRtpTransceiver value);
}
/// The **`RTCSctpTransport`** interface provides information which describes a
/// Stream Control Transmission Protocol (****) transport. This provides
/// information about limitations of the transport, but also provides a way to
/// access the underlying Datagram Transport Layer Security (****) transport
/// over which SCTP packets for all of an [RTCPeerConnection]'s data channels
/// are sent and received.
///
/// You don't create `RTCSctpTransport` objects yourself; instead, you get
/// access to the `RTCSctpTransport` for a given `RTCPeerConnection` through its
/// **[RTCPeerConnection.sctp]** property.
///
/// Possibly the most useful property on this interface is its
/// [`maxMessageSize`](#rtcsctptransport.maxmessagesize) property, which you can
/// use to determine the upper limit on the size of messages you can send over a
/// data channel on the peer connection.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/RTCSctpTransport).
extension type RTCSctpTransport._(JSObject _) implements EventTarget, JSObject {
/// The **`transport`** read-only property of the [RTCSctpTransport] interface
/// returns a [RTCDtlsTransport] object representing the transport used for
/// the transmission and receipt of data packets.
external RTCDtlsTransport get transport;
/// The **`state`** read-only property of the [RTCSctpTransport] interface
/// provides information which describes a Stream Control Transmission
/// Protocol () transport state.
external RTCSctpTransportState get state;
/// The **`maxMessageSize`** read-only property of the [RTCSctpTransport]
/// interface indicates the maximum size of a message that can be sent using
/// the [RTCDataChannel.send] method.
external double get maxMessageSize;
/// The **`maxChannels`** read-only property of the [RTCSctpTransport]
/// interface indicates the maximum number of [RTCDataChannel] objects that
/// can be opened simultaneously.
external int? get maxChannels;
external EventHandler get onstatechange;
external set onstatechange(EventHandler value);
}
/// The **`RTCDataChannel`** interface represents a network channel which can be
/// used for bidirectional peer-to-peer transfers of arbitrary data. Every data
/// channel is associated with an [RTCPeerConnection], and each peer connection
/// can have up to a theoretical maximum of 65,534 data channels (the actual
/// limit may vary from browser to browser).
///
/// To create a data channel and ask a remote peer to join you, call the
/// [RTCPeerConnection]'s [RTCPeerConnection.createDataChannel] method. The peer
/// being invited to exchange data receives a
/// [RTCPeerConnection.datachannel_event] event (which has type
/// [RTCDataChannelEvent]) to let it know the data channel has been added to the
/// connection.
///
/// `RTCDataChannel` is a
/// [transferable object](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Transferable_objects).
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel).
extension type RTCDataChannel._(JSObject _) implements EventTarget, JSObject {
/// The **`RTCDataChannel.close()`** method closes the
/// [RTCDataChannel]. Either peer is permitted to call this method to initiate
/// closure of the channel.
///
/// Closure of the data channel is not instantaneous. Most of the process of
/// closing the
/// connection is handled asynchronously; you can detect when the channel has
/// finished
/// closing by watching for a [RTCDataChannel.close_event] event on the data
/// channel.
///
/// The sequence of events which occurs in response to this method being
/// called:
///
/// 1. [RTCDataChannel.readyState] is set to `closing`.
/// 2. A background task is established to handle the remainder of the steps
/// below, and
/// `close()` returns to the caller.
/// 3. The transport layer deals with any buffered messages; the protocol
/// layer decides
/// whether to send them or discard them.
/// 4. The underlying data transport is closed.
/// 5. The [RTCDataChannel.readyState] property is set to
/// `closed`.
/// 6. If the transport was closed with an error,
/// the `RTCDataChannel` is sent
/// an [RTCDataChannel.error_event] event
/// with its [DOMException.name] set to `NetworkError`.
/// 7. A [RTCDataChannel.close_event] event is sent to the channel.
external void close();
/// The **`send()`** method of the
/// [RTCDataChannel] interface sends data across the data channel to the
/// remote peer.
/// This can be done any time except during the initial process of
/// creating the underlying transport channel. Data sent before connecting is
/// buffered if
/// possible (or an error occurs if it's not possible), and is also buffered
/// if sent while
/// the connection is closing or closed.
///
/// > [!NOTE]
/// > Different browsers have different limitations on the size of the message
/// > you can
/// > send. Specifications exist to define how to automatically fragment large
/// > messages, but
/// > not all browsers implement them, and those that do have various
/// > additional
/// > restrictions. This will get less complicated over time, but for now, if
/// > you have
/// > questions, see
/// > [Understanding message size limits](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Using_data_channels#understanding_message_size_limits).
external void send(JSAny data);
/// The read-only `RTCDataChannel` property **`label`**
/// returns a string containing a name describing the data channel. These
/// labels are not required to be unique.
///
/// You may use the label as you wish; you could use it to identify all the
/// channels that
/// are being used for the same purpose, by giving them all the same name. Or
/// you could give
/// each channel a unique label for tracking purposes. It's entirely up to the
/// design
/// decisions made when building your site or app.
///
/// A unique ID can be found in the [RTCDataChannel.id] property.
///
/// > [!NOTE]
/// > A data channel's label is set when the channel is created by calling
/// > [RTCPeerConnection.createDataChannel]. It cannot be changed after that.
external String get label;
/// The read-only `RTCDataChannel` property **`ordered`** indicates
/// whether or not the data channel guarantees in-order delivery of messages;
/// the default is `true`,
/// which indicates that the data channel is indeed ordered.
/// This is set when the [RTCDataChannel] is created,
/// by setting the `ordered` property
/// on the object passed as [RTCPeerConnection.createDataChannel]'s `options`
/// parameter.
external bool get ordered;
/// The read-only `RTCDataChannel` property
/// **`maxPacketLifeTime`** returns the amount of time, in
/// milliseconds, the browser is allowed to take to attempt to transmit a
/// message, as set
/// when the data channel was created, or `null`. This limits how long
/// the browser can continue to attempt to transmit and retransmit the message
/// before giving
/// up.
external int? get maxPacketLifeTime;
/// The read-only `RTCDataChannel` property
/// **`maxRetransmits`** returns the maximum number of times the
/// browser should try to retransmit a message before giving up, as set when
/// the data
/// channel was created, or `null`, which indicates that there is no
/// maximum. This can only be set when the [RTCDataChannel] is created
/// by calling [RTCPeerConnection.createDataChannel], using the
/// `maxRetransmits` field in the specified `options`.
external int? get maxRetransmits;
/// The read-only `RTCDataChannel` property
/// **`protocol`** returns a string containing the
/// name of the subprotocol in use. If no protocol was specified when the data
/// channel was
/// created, then this property's value is the empty string (`""`).
///
/// > [!NOTE]
/// > The permitted values of this property are defined by the website or app
/// > using the
/// > data channel.
///
/// The ability for each channel to have a defined subprotocol lets your app,
/// for example,
/// use JSON objects as messages on one channel while another channel is
/// plaintext and
/// another is raw binary or even some other format.
external String get protocol;
/// The read-only `RTCDataChannel` property
/// **`negotiated`** indicates whether the
/// [RTCDataChannel]'s connection was negotiated by the Web app
/// (`true`) or by the WebRTC layer (`false`). **The
/// default is `false`.**
///
/// See
/// [Creating a data channel](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Using_data_channels#creating_a_data_channel)
/// for further information about this property.
external bool get negotiated;
/// The read-only `RTCDataChannel` property
/// **`id`** returns an ID number (between 0 and 65,534) which
/// uniquely identifies the [RTCDataChannel]. This ID is set at the
/// time the data channel is created, either by the user agent (if
/// [RTCDataChannel.negotiated] is `false`) or by the site or app
/// script (if `negotiated` is `true`).
///
/// Each [RTCPeerConnection] can therefore have up to a theoretical maximum of
/// 65,534 data channels on it, although the actual maximum may vary from
/// browser to
/// browser.
external int? get id;
/// The read-only `RTCDataChannel` property **`readyState`** returns a string
/// which indicates the state of the data channel's underlying data
/// connection.
external RTCDataChannelState get readyState;
/// The read-only `RTCDataChannel` property
/// **`bufferedAmount`** returns the number of bytes of data
/// currently queued to be sent over the data channel. The queue may build up
/// as a
/// result of calls to the [RTCDataChannel.send] method. This only
/// includes data buffered by the user agent itself; it doesn't include any
/// framing overhead
/// or buffering done by the operating system or network hardware.
///
/// The user agent may implement the process of actually sending data in any
/// way it
/// chooses; this may be done periodically during the event loop or truly
/// asynchronously. As
/// messages are actually sent, this value is reduced accordingly.
///
/// > [!NOTE]
/// > Closing the data channel doesn't reset this count, even though the user
/// > agent purges
/// > the queued messages. However, even after closing the channel, attempts
/// > to send
/// > messages continue to add to the `bufferedAmount` value, even though the
/// > messages are neither sent nor buffered.
///
/// Whenever this value decreases to fall to or below the value specified in
/// the
/// [RTCDataChannel.bufferedAmountLowThreshold]
/// property, the user agent fires the
/// [RTCDataChannel.bufferedamountlow_event] event. This event may
/// be used, for example, to implement code which queues more messages to be
/// sent whenever
/// there's room to buffer them.
external int get bufferedAmount;
/// The `RTCDataChannel` property
/// **`bufferedAmountLowThreshold`** is used to specify the number
/// of bytes of buffered outgoing data that is considered "low." The default
/// value is
/// 0\. When the number of buffered outgoing bytes, as indicated by the
/// [RTCDataChannel.bufferedAmount] property, falls to or
/// below this value, a [RTCDataChannel.bufferedamountlow_event] event is
/// fired. This event may be
/// used, for example, to implement code which queues more messages to be sent
/// whenever
/// there's room to buffer them. Listeners may be added with
/// [RTCDataChannel.bufferedamountlow_event] or
/// [EventTarget.addEventListener].
///
/// The user agent may implement the process of actually sending data in any
/// way it
/// chooses; this may be done periodically during the event loop or truly
/// asynchronously. As
/// messages are actually sent, this value is reduced accordingly.
///
/// > **Note:** `bufferedamountlow` events are not fired after the data
/// > channel is closed.
external int get bufferedAmountLowThreshold;
external set bufferedAmountLowThreshold(int value);
external EventHandler get onopen;
external set onopen(EventHandler value);
external EventHandler get onbufferedamountlow;
external set onbufferedamountlow(EventHandler value);
external EventHandler get onerror;
external set onerror(EventHandler value);
external EventHandler get onclosing;
external set onclosing(EventHandler value);
external EventHandler get onclose;
external set onclose(EventHandler value);
external EventHandler get onmessage;
external set onmessage(EventHandler value);
/// The property **`binaryType`** on the
/// [RTCDataChannel] interface is a string which specifies
/// the type of object which should be used to represent binary data received
/// on the [RTCDataChannel]. Values allowed by the
/// [WebSocket.binaryType] property are also permitted here:
/// `blob` if [Blob] objects are being used or
/// `arraybuffer` if `ArrayBuffer` objects are being used. The
/// default is `arraybuffer`.
///
/// When a binary message is received on the data channel, the resulting
/// [RTCDataChannel.message_event] event's [MessageEvent.data] property is an
/// object of
/// the type specified by the `binaryType`.
external BinaryType get binaryType;
external set binaryType(BinaryType value);
}
extension type RTCDataChannelInit._(JSObject _) implements JSObject {
external factory RTCDataChannelInit({
bool ordered,
int maxPacketLifeTime,
int maxRetransmits,
String protocol,
bool negotiated,
int id,
RTCPriorityType priority,
});
external bool get ordered;
external set ordered(bool value);
external int get maxPacketLifeTime;
external set maxPacketLifeTime(int value);
external int get maxRetransmits;
external set maxRetransmits(int value);
external String get protocol;
external set protocol(String value);
external bool get negotiated;
external set negotiated(bool value);
external int get id;
external set id(int value);
external RTCPriorityType get priority;
external set priority(RTCPriorityType value);
}
/// The **`RTCDataChannelEvent`** interface
/// represents an event related to a specific [RTCDataChannel].
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannelEvent).
extension type RTCDataChannelEvent._(JSObject _) implements Event, JSObject {
external factory RTCDataChannelEvent(
String type,
RTCDataChannelEventInit eventInitDict,
);
/// The read-only property **`RTCDataChannelEvent.channel`**
/// returns the [RTCDataChannel] associated with the event.
external RTCDataChannel get channel;
}
extension type RTCDataChannelEventInit._(JSObject _)
implements EventInit, JSObject {
external factory RTCDataChannelEventInit({
bool bubbles,
bool cancelable,
bool composed,
required RTCDataChannel channel,
});
external RTCDataChannel get channel;
external set channel(RTCDataChannel value);
}
/// The **`RTCDTMFSender`** interface provides a mechanism for transmitting
/// codes on a
/// [WebRTC](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API)
/// [RTCPeerConnection]. You gain access to the connection's `RTCDTMFSender`
/// through the [RTCRtpSender.dtmf] property on the audio track you wish to send
/// DTMF with.
///
/// The primary purpose for WebRTC's DTMF support is to allow WebRTC-based
/// communication clients to be connected to a [public-switched telephone
/// network
/// (PSTN)](https://en.wikipedia.org/wiki/Public_switched_telephone_network) or
/// other legacy telephone service, including extant voice over IP (VoIP)
/// services. For that reason, DTMF can't be used between two WebRTC-based
/// devices, because there is no mechanism provided by WebRTC for receiving DTMF
/// codes.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/RTCDTMFSender).
extension type RTCDTMFSender._(JSObject _) implements EventTarget, JSObject {
/// The **`insertDTMF()`** method of the [RTCDTMFSender] interface sends
/// tones to the remote peer over the [RTCPeerConnection].
///
/// Tones are sent asynchronously. Every time a tone starts or ends, a
/// [`tonechange`](https://developer.mozilla.org/en-US/docs/Web/API/RTCDTMFSender/tonechange_event)
/// event is sent to the `RTCDTMFSender`.
///
/// You can call `insertDTMF()` at any time while the connection is active.
/// Each call to `insertDTMF()` replaces any pending tones in the
/// `toneBuffer`.
/// You can abort sending queued tones by specifying an empty string (`""`) as
/// the set of tones to play.
/// Since `insertDTMF()` replaces the tone buffer, in order to add to the DTMF
/// tones being played, it is necessary to call `insertDTMF()` with a string
/// containing both the remaining tones (stored in the `toneBuffer`) and the
/// new tones appended together.
external void insertDTMF(
String tones, [
int duration,
int interToneGap,
]);
external EventHandler get ontonechange;
external set ontonechange(EventHandler value);
/// The **`canInsertDTMF`** read-only property of the [RTCDTMFSender]
/// interface returns a boolean value which indicates whether the
/// `RTCDTMFSender` is capable of sending DTMF tones over the
/// [RTCPeerConnection].
external bool get canInsertDTMF;
/// The [RTCDTMFSender] interface's toneBuffer property returns a string
/// containing a list of the tones currently queued for sending to the
/// remote peer over the [RTCPeerConnection]. To place tones into the buffer,
/// call [RTCDTMFSender.insertDTMF].
///
/// Tones are removed from the string as they're played, so only upcoming
/// tones are listed.
external String get toneBuffer;
}
/// The **`RTCDTMFToneChangeEvent`** interface represents events sent to
/// indicate that tones have started or finished playing. This interface is
/// used by the
/// [`tonechange`](https://developer.mozilla.org/en-US/docs/Web/API/RTCDTMFSender/tonechange_event)
/// event.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/RTCDTMFToneChangeEvent).
extension type RTCDTMFToneChangeEvent._(JSObject _) implements Event, JSObject {
external factory RTCDTMFToneChangeEvent(
String type, [
RTCDTMFToneChangeEventInit eventInitDict,
]);
/// The read-only property **`RTCDTMFToneChangeEvent.tone`**
/// returns the DTMF character which has just begun to play, or an empty
/// string
/// (`""`). if all queued tones have finished playing (that is,
/// [RTCDTMFSender.toneBuffer] is empty).
external String get tone;
}
extension type RTCDTMFToneChangeEventInit._(JSObject _)
implements EventInit, JSObject {
external factory RTCDTMFToneChangeEventInit({
bool bubbles,
bool cancelable,
bool composed,
String tone,
});
external String get tone;
external set tone(String value);
}
/// The **`RTCStatsReport`** interface of the
/// [WebRTC API](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API)
/// provides a statistics report for a [RTCPeerConnection], [RTCRtpSender], or
/// [RTCRtpReceiver].
///
/// An `RTCStatsReport` instance is a read-only
/// [`Map`-like object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#map-like_browser_apis),
/// in which each key is an identifier for an object for which statistics are
/// being reported, and the corresponding value is a dictionary object providing
/// the statistics.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/RTCStatsReport).
extension type RTCStatsReport._(JSObject _) implements JSObject {}
/// The **`RTCError`** interface describes an error which has occurred while
/// handling
/// [WebRTC](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API)
/// operations. It's based upon the standard [DOMException] interface that
/// describes general DOM errors.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/RTCError).
extension type RTCError._(JSObject _) implements DOMException, JSObject {
external factory RTCError(
RTCErrorInit init, [
String message,
]);
/// The [RTCError] interface's read-only
/// **`errorDetail`** property is a string indicating the
/// [WebRTC](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API)-specific
/// error code that occurred.
external RTCErrorDetailType get errorDetail;
/// The [RTCError] interface's read-only property
/// **`sdpLineNumber`** specifies the line number within the
/// at which a syntax error occurred while parsing it.
external int? get sdpLineNumber;
/// The read-only **`sctpCauseCode`** property in an
/// [RTCError] object provides the cause code explaining
/// why the SCTP negotiation failed, if the `RTCError` represents an SCTP
/// error.
external int? get sctpCauseCode;
/// The [RTCError] read-only property
/// **`receivedAlert`** specifies the fatal
/// error which resulted in an alert being received from the remote peer.
external int? get receivedAlert;
/// The read-only **`sentAlert`** property in an
/// [RTCError] object specifies the alert number occurred
/// while sending data to the remote peer, if the error represents an outbound
/// DTLS error.
external int? get sentAlert;
external int? get httpRequestStatusCode;
}
extension type RTCErrorInit._(JSObject _) implements JSObject {
external factory RTCErrorInit({
required RTCErrorDetailType errorDetail,
int sdpLineNumber,
int sctpCauseCode,
int receivedAlert,
int sentAlert,
int httpRequestStatusCode,
});
external RTCErrorDetailType get errorDetail;
external set errorDetail(RTCErrorDetailType value);
external int get sdpLineNumber;
external set sdpLineNumber(int value);
external int get sctpCauseCode;
external set sctpCauseCode(int value);
external int get receivedAlert;
external set receivedAlert(int value);
external int get sentAlert;
external set sentAlert(int value);
external int get httpRequestStatusCode;
external set httpRequestStatusCode(int value);
}
/// The WebRTC API's **`RTCErrorEvent`** interface represents an error sent to a
/// WebRTC object. It's based on the standard [Event] interface, but adds
/// RTC-specific information describing the error, as shown below.
///
/// ---
///
/// API documentation sourced from
/// [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/RTCErrorEvent).
extension type RTCErrorEvent._(JSObject _) implements Event, JSObject {
external factory RTCErrorEvent(
String type,
RTCErrorEventInit eventInitDict,
);
/// The read-only [RTCErrorEvent] property **`error`**
/// contains an [RTCError] object describing the details of the error which
/// the
/// event is announcing.
external RTCError get error;
}
extension type RTCErrorEventInit._(JSObject _) implements EventInit, JSObject {
external factory RTCErrorEventInit({
bool bubbles,
bool cancelable,
bool composed,
required RTCError error,
});
external RTCError get error;
external set error(RTCError value);
}