livekit-client 2.5.7 → 2.5.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/README.md +2 -2
  2. package/dist/livekit-client.e2ee.worker.js +1 -1
  3. package/dist/livekit-client.e2ee.worker.js.map +1 -1
  4. package/dist/livekit-client.e2ee.worker.mjs +53 -20
  5. package/dist/livekit-client.e2ee.worker.mjs.map +1 -1
  6. package/dist/livekit-client.esm.mjs +39 -3
  7. package/dist/livekit-client.esm.mjs.map +1 -1
  8. package/dist/livekit-client.umd.js +1 -1
  9. package/dist/livekit-client.umd.js.map +1 -1
  10. package/dist/src/e2ee/worker/FrameCryptor.d.ts.map +1 -1
  11. package/dist/src/e2ee/worker/ParticipantKeyHandler.d.ts +25 -5
  12. package/dist/src/e2ee/worker/ParticipantKeyHandler.d.ts.map +1 -1
  13. package/dist/src/room/Room.d.ts +3 -1
  14. package/dist/src/room/Room.d.ts.map +1 -1
  15. package/dist/src/room/events.d.ts +5 -1
  16. package/dist/src/room/events.d.ts.map +1 -1
  17. package/dist/src/room/participant/LocalParticipant.d.ts +7 -0
  18. package/dist/src/room/participant/LocalParticipant.d.ts.map +1 -1
  19. package/dist/ts4.2/src/e2ee/worker/ParticipantKeyHandler.d.ts +25 -5
  20. package/dist/ts4.2/src/room/Room.d.ts +3 -1
  21. package/dist/ts4.2/src/room/events.d.ts +5 -1
  22. package/dist/ts4.2/src/room/participant/LocalParticipant.d.ts +7 -0
  23. package/package.json +7 -7
  24. package/src/e2ee/worker/FrameCryptor.test.ts +311 -113
  25. package/src/e2ee/worker/FrameCryptor.ts +10 -5
  26. package/src/e2ee/worker/ParticipantKeyHandler.test.ts +169 -5
  27. package/src/e2ee/worker/ParticipantKeyHandler.ts +50 -20
  28. package/src/e2ee/worker/__snapshots__/ParticipantKeyHandler.test.ts.snap +356 -0
  29. package/src/room/Room.ts +8 -0
  30. package/src/room/events.ts +5 -0
  31. package/src/room/participant/LocalParticipant.ts +26 -1
  32. package/src/room/track/LocalTrackPublication.ts +1 -1
package/src/room/Room.ts CHANGED
@@ -7,6 +7,7 @@ import {
7
7
  JoinResponse,
8
8
  LeaveRequest,
9
9
  LeaveRequest_Action,
10
+ MetricsBatch,
10
11
  ParticipantInfo,
11
12
  ParticipantInfo_State,
12
13
  ParticipantPermission,
@@ -1546,6 +1547,8 @@ class Room extends (EventEmitter as new () => TypedEmitter<RoomEventCallbacks>)
1546
1547
  this.handleSipDtmf(participant, packet.value.value);
1547
1548
  } else if (packet.value.case === 'chatMessage') {
1548
1549
  this.handleChatMessage(participant, packet.value.value);
1550
+ } else if (packet.value.case === 'metrics') {
1551
+ this.handleMetrics(packet.value.value, participant);
1549
1552
  }
1550
1553
  };
1551
1554
 
@@ -1595,6 +1598,10 @@ class Room extends (EventEmitter as new () => TypedEmitter<RoomEventCallbacks>)
1595
1598
  this.emit(RoomEvent.ChatMessage, msg, participant);
1596
1599
  };
1597
1600
 
1601
+ private handleMetrics = (metrics: MetricsBatch, participant?: Participant) => {
1602
+ this.emit(RoomEvent.MetricsReceived, metrics, participant);
1603
+ };
1604
+
1598
1605
  private handleAudioPlaybackStarted = () => {
1599
1606
  if (this.canPlaybackAudio) {
1600
1607
  return;
@@ -2295,4 +2302,5 @@ export type RoomEventCallbacks = {
2295
2302
  activeDeviceChanged: (kind: MediaDeviceKind, deviceId: string) => void;
2296
2303
  chatMessage: (message: ChatMessage, participant?: RemoteParticipant | LocalParticipant) => void;
2297
2304
  localTrackSubscribed: (publication: LocalTrackPublication, participant: LocalParticipant) => void;
2305
+ metricsReceived: (metrics: MetricsBatch, participant?: Participant) => void;
2298
2306
  };
@@ -330,6 +330,11 @@ export enum RoomEvent {
330
330
  * fired when the first remote participant has subscribed to the localParticipant's track
331
331
  */
332
332
  LocalTrackSubscribed = 'localTrackSubscribed',
333
+
334
+ /**
335
+ * fired when the client receives connection metrics from other participants
336
+ */
337
+ MetricsReceived = 'metricsReceived',
333
338
  }
334
339
 
335
340
  export enum ParticipantEvent {
@@ -10,6 +10,7 @@ import {
10
10
  RequestResponse,
11
11
  RequestResponse_Reason,
12
12
  SimulcastCodec,
13
+ SipDTMF,
13
14
  SubscribedQualityUpdate,
14
15
  TrackInfo,
15
16
  TrackUnpublishedResponse,
@@ -281,7 +282,10 @@ export default class LocalParticipant extends Participant {
281
282
  (!name || this.name === name) &&
282
283
  (!metadata || this.metadata === metadata) &&
283
284
  (!attributes ||
284
- Object.entries(attributes).every(([key, value]) => this.attributes[key] === value))
285
+ Object.entries(attributes).every(
286
+ ([key, value]) =>
287
+ this.attributes[key] === value || (value === '' && !this.attributes[key]),
288
+ ))
285
289
  ) {
286
290
  this.pendingSignalRequests.delete(requestId);
287
291
  resolve();
@@ -1349,6 +1353,27 @@ export default class LocalParticipant extends Participant {
1349
1353
  await this.engine.sendDataPacket(packet, kind);
1350
1354
  }
1351
1355
 
1356
+ /**
1357
+ * Publish SIP DTMF message to the room.
1358
+ *
1359
+ * @param code DTMF code
1360
+ * @param digit DTMF digit
1361
+ */
1362
+ async publishDtmf(code: number, digit: string): Promise<void> {
1363
+ const packet = new DataPacket({
1364
+ kind: DataPacket_Kind.RELIABLE,
1365
+ value: {
1366
+ case: 'sipDtmf',
1367
+ value: new SipDTMF({
1368
+ code: code,
1369
+ digit: digit,
1370
+ }),
1371
+ },
1372
+ });
1373
+
1374
+ await this.engine.sendDataPacket(packet, DataPacket_Kind.RELIABLE);
1375
+ }
1376
+
1352
1377
  async sendChatMessage(text: string): Promise<ChatMessage> {
1353
1378
  const msg = {
1354
1379
  id: crypto.randomUUID(),
@@ -99,7 +99,7 @@ export default class LocalTrackPublication extends TrackPublication {
99
99
  features.add(AudioTrackFeature.TF_STEREO);
100
100
  }
101
101
  if (!this.options?.dtx) {
102
- features.add(AudioTrackFeature.TF_STEREO);
102
+ features.add(AudioTrackFeature.TF_NO_DTX);
103
103
  }
104
104
  if (this.track.enhancedNoiseCancellation) {
105
105
  features.add(AudioTrackFeature.TF_ENHANCED_NOISE_CANCELLATION);