twilio-video
Version:
Twilio Video JavaScript Library
164 lines • 6.8 kB
JavaScript
// @ts-check
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var filterObject = require('../../util').filterObject;
/** @typedef {Object} IceCandidatePayload
* Definition for local and remote ICE candidate telemetry payloads
* @property {string} [candidateType] - Alias for RTCIceCandidate.type
* @property {string} [ip] - Alias for RTCIceCandidate.address
* @property {number} [port]
* @property {number} [priority]
* @property {string} [protocol]
* @property {string} [relatedAddress]
* @property {number} [relatedPort]
* @property {string} [tcpType]
* @property {string} [transportId] - Alias for RTCIceCandidate.sdpMid
* @property {number} [networkCost]
*/
/**
* PeerConnection telemetry events
* @internal
*/
var PeerConnectionEvents = /** @class */ (function () {
/**
* @param {import('../telemetry')} telemetry - The telemetry instance
*/
function PeerConnectionEvents(telemetry) {
this._telemetry = telemetry;
}
/**
* Emit connection state change event
* @param {string} peerConnectionId - Peer connection identifier
* @param {('new'|'connecting'|'connected'|'disconnected'|'failed'|'closed')} state - Connection state
* @returns {void}
*/
PeerConnectionEvents.prototype.connectionState = function (peerConnectionId, state) {
this._telemetry.debug({
group: 'pc-connection-state',
name: state,
payload: { peerConnectionId: peerConnectionId }
});
};
/**
* Emit signaling state change event
* @param {string} peerConnectionId - Peer connection identifier
* @param {('stable'|'have-local-offer'|'have-remote-offer'|'have-local-pranswer'|'have-remote-pranswer'|'closed')} state - Signaling state
* @returns {void}
*/
PeerConnectionEvents.prototype.signalingState = function (peerConnectionId, state) {
this._telemetry.debug({
group: 'pc-signaling-state',
name: state,
payload: { peerConnectionId: peerConnectionId }
});
};
/**
* Emit ice gathering state change event
* @param {string} peerConnectionId - Peer connection identifier
* @param {('new'|'gathering'|'complete')} state - Ice gathering state
* @returns {void}
*/
PeerConnectionEvents.prototype.iceGatheringState = function (peerConnectionId, state) {
this._telemetry.debug({
group: 'ice-gathering-state',
name: state,
payload: { peerConnectionId: peerConnectionId }
});
};
/**
* Emit ice connection state change event
* @param {string} peerConnectionId - Peer connection identifier
* @param {('new'|'checking'|'connected'|'completed'|'disconnected'|'failed'|'closed')} state - Ice connection state
* @returns {void}
*/
PeerConnectionEvents.prototype.iceConnectionState = function (peerConnectionId, state) {
var level = state === 'failed' ? 'error' : 'debug';
this._telemetry[level]({
group: 'ice-connection-state',
name: state,
payload: { peerConnectionId: peerConnectionId }
});
};
/**
* Emit DTLS transport state change event
* @param {string} peerConnectionId - Peer connection identifier
* @param {('new'|'connecting'|'connected'|'closed'|'failed')} state - DTLS transport state
* @returns {void}
*/
PeerConnectionEvents.prototype.dtlsTransportState = function (peerConnectionId, state) {
var level = state === 'failed' ? 'error' : 'debug';
this._telemetry[level]({
group: 'dtls-transport-state',
name: state,
payload: { peerConnectionId: peerConnectionId }
});
};
/**
* Emit a telemetry event when a new ICE candidate is added
* @param {string} peerConnectionId - The peer connection identifier
* @param {RTCIceCandidate} iceCandidate - The native RTCIceCandidate object
* @param {boolean} [isRemote = false] - Whether the candidate is remote
* @returns {void}
*/
PeerConnectionEvents.prototype.iceCandidate = function (peerConnectionId, iceCandidate, isRemote) {
if (isRemote === void 0) { isRemote = false; }
this._telemetry.debug({
group: 'ice-candidate',
name: 'ice-candidate',
payload: __assign({ peerConnectionId: peerConnectionId, isRemote: isRemote ? 'true' : 'false' }, this._toIceCandidatePayload(iceCandidate))
});
};
/**
* Emit a telemetry event when the selected ICE candidate pair changes
* @param {string} peerConnectionId - The peer connection identifier
* @param {RTCIceCandidatePair} pair - The selected candidate pair
* @returns {void}
*/
PeerConnectionEvents.prototype.selectedCandidatePair = function (peerConnectionId, pair) {
this._telemetry.debug({
group: 'ice-candidate',
name: 'selected-ice-candidate-pair',
payload: filterObject({
peerConnectionId: peerConnectionId,
localCandidate: pair.local ? this._toIceCandidatePayload(pair.local) : null,
remoteCandidate: pair.remote ? this._toIceCandidatePayload(pair.remote) : null
}, null)
});
};
/**
* Convert RTCIceCandidate to telemetry payload format
* @private
* @param {RTCIceCandidate} iceCandidate - The RTCIceCandidate object
* @returns {IceCandidatePayload} The telemetry payload format
*/
PeerConnectionEvents.prototype._toIceCandidatePayload = function (iceCandidate) {
var _a;
var match = (_a = iceCandidate.candidate) === null || _a === void 0 ? void 0 : _a.match(/network-cost\s+(\d+)/);
var networkCost = match ? parseInt(match[1], 10) : null;
return filterObject({
'candidateType': iceCandidate.type,
'ip': iceCandidate.address,
'port': iceCandidate.port,
'priority': iceCandidate.priority,
'protocol': iceCandidate.protocol,
'relatedAddress': iceCandidate.relatedAddress,
'relatedPort': iceCandidate.relatedPort,
'tcpType': iceCandidate.tcpType,
'transportId': iceCandidate.sdpMid,
'networkCost': networkCost
}, null);
};
return PeerConnectionEvents;
}());
module.exports = PeerConnectionEvents;
//# sourceMappingURL=peerconnection.js.map