@observertc/observer-js 1.0.1-7be4daa.0 → 1.0.1-7f7cf82.0

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.
@@ -21,9 +21,10 @@ var ClientEventTypes;
21
21
  ClientEventTypes["DATA_CHANNEL_ERROR"] = "DATA_CHANNEL_ERROR";
22
22
  ClientEventTypes["NEGOTIATION_NEEDED"] = "NEGOTIATION_NEEDED";
23
23
  ClientEventTypes["SIGNALING_STATE_CHANGE"] = "SIGNALING_STATE_CHANGE";
24
- ClientEventTypes["ICE_GATHERING_STATE_CHANGE"] = "ICE_GATHERING_STATE_CHANGE";
25
- ClientEventTypes["ICE_CONNECTION_STATE_CHANGE"] = "ICE_CONNECTION_STATE_CHANGE";
24
+ // ICE_GATHERING_STATE_CHANGE = 'ICE_GATHERING_STATE_CHANGE',
25
+ // ICE_CONNECTION_STATE_CHANGE = 'ICE_CONNECTION_STATE_CHANGE',
26
26
  ClientEventTypes["ICE_CANDIDATE"] = "ICE_CANDIDATE";
27
+ ClientEventTypes["ICE_CANDIDATE_ERROR"] = "ICE_CANDIDATE_ERROR";
27
28
  // mediasoup events
28
29
  ClientEventTypes["PRODUCER_ADDED"] = "PRODUCER_ADDED";
29
30
  ClientEventTypes["PRODUCER_REMOVED"] = "PRODUCER_REMOVED";
@@ -31,6 +32,8 @@ var ClientEventTypes;
31
32
  ClientEventTypes["PRODUCER_RESUMED"] = "PRODUCER_RESUMED";
32
33
  ClientEventTypes["CONSUMER_ADDED"] = "CONSUMER_ADDED";
33
34
  ClientEventTypes["CONSUMER_REMOVED"] = "CONSUMER_REMOVED";
35
+ ClientEventTypes["CONSUMER_PAUSED"] = "CONSUMER_PAUSED";
36
+ ClientEventTypes["CONSUMER_RESUMED"] = "CONSUMER_RESUMED";
34
37
  ClientEventTypes["DATA_PRODUCER_CREATED"] = "DATA_PRODUCER_CREATED";
35
38
  ClientEventTypes["DATA_PRODUCER_CLOSED"] = "DATA_PRODUCER_CLOSED";
36
39
  ClientEventTypes["DATA_CONSUMER_CREATED"] = "DATA_CONSUMER_CREATED";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@observertc/observer-js",
3
- "version": "1.0.1-7be4daa.0",
3
+ "version": "1.0.1-7f7cf82.0",
4
4
  "description": "Server Side NodeJS Library for processing ObserveRTC Samples",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -381,7 +381,7 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
381
381
  } else if (postBuffer) {
382
382
  postBuffer.push(event);
383
383
  } else {
384
- logger.warn('Received PEER_CONNECTION_OPENED event without a corresponding observedPeerConnection', event);
384
+ logger.warn('Received PEER_CONNECTION_OPENED event without a corresponding observedPeerConnection: %o', event);
385
385
  }
386
386
 
387
387
  }
@@ -398,7 +398,7 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
398
398
  } else if (postBuffer) {
399
399
  postBuffer.push(event);
400
400
  } else {
401
- logger.warn('Received PEER_CONNECTION_CLOSED event without a corresponding observedPeerConnection', event);
401
+ logger.warn('Received PEER_CONNECTION_CLOSED event without a corresponding observedPeerConnection: %o', event);
402
402
  }
403
403
  }
404
404
  break;
@@ -415,7 +415,7 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
415
415
  } else if (postBuffer) {
416
416
  postBuffer.push(event);
417
417
  } else {
418
- logger.warn('Received MEDIA_TRACK_ADDED event without a corresponding observedPeerConnection or observedTrack', event);
418
+ logger.warn('Received MEDIA_TRACK_ADDED event without a corresponding observedPeerConnection or observedTrack: %o', event);
419
419
  }
420
420
  }
421
421
  break;
@@ -432,7 +432,7 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
432
432
  } else if (postBuffer) {
433
433
  postBuffer.push(event);
434
434
  } else {
435
- logger.warn('Received MEDIA_TRACK_REMOVED event without a corresponding observedPeerConnection or observedTrack', event);
435
+ logger.warn('Received MEDIA_TRACK_REMOVED event without a corresponding observedPeerConnection or observedTrack: %o', event);
436
436
  }
437
437
  }
438
438
  break;
@@ -449,7 +449,7 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
449
449
  } else if (postBuffer) {
450
450
  postBuffer.push(event);
451
451
  } else {
452
- logger.warn('Received DATA_CHANNEL_OPENED event without a corresponding observedPeerConnection or observedDataChannel', event);
452
+ logger.warn('Received DATA_CHANNEL_OPENED event without a corresponding observedPeerConnection or observedDataChannel: %o', event);
453
453
  }
454
454
  }
455
455
  break;
@@ -466,12 +466,119 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
466
466
  } else if (postBuffer) {
467
467
  postBuffer.push(event);
468
468
  } else {
469
- logger.warn('Received DATA_CHANNEL_CLOSE event without a corresponding observedPeerConnection or observedDataChannel', event);
469
+ logger.warn('Received DATA_CHANNEL_CLOSE event without a corresponding observedPeerConnection or observedDataChannel: %o', event);
470
+ }
471
+ }
472
+ break;
473
+ }
474
+ case ClientEventTypes.MEDIA_TRACK_MUTED: {
475
+ const payload = parseJsonAs<Record<string, unknown>>(event.payload);
476
+
477
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.trackId && typeof payload.trackId === 'string') {
478
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
479
+ const observedInboundTrack = observedPeerConnection?.observedInboundTracks.get(payload.trackId);
480
+ const observedOutboundTrack = observedPeerConnection?.observedOutboundTracks.get(payload.trackId);
481
+
482
+ if (observedPeerConnection) {
483
+ if (observedInboundTrack) {
484
+ observedInboundTrack.muted = true;
485
+ observedPeerConnection?.emit('muted-inbound-track', observedInboundTrack);
486
+ } else if (observedOutboundTrack) {
487
+ observedOutboundTrack.muted = true;
488
+ observedPeerConnection?.emit('muted-outbound-track', observedOutboundTrack);
489
+ }
490
+ } else if (postBuffer) {
491
+ postBuffer.push(event);
492
+ } else {
493
+ logger.warn('Received MEDIA_TRACK_MUTED event without a corresponding observedPeerConnection or observedTrack: %o', event);
494
+ }
495
+ }
496
+
497
+ break;
498
+ }
499
+ case ClientEventTypes.MEDIA_TRACK_UNMUTED: {
500
+ const payload = parseJsonAs<Record<string, unknown>>(event.payload);
501
+
502
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.trackId && typeof payload.trackId === 'string') {
503
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
504
+ const observedInboundTrack = observedPeerConnection?.observedInboundTracks.get(payload.trackId);
505
+ const observedOutboundTrack = observedPeerConnection?.observedOutboundTracks.get(payload.trackId);
506
+
507
+ if (observedPeerConnection) {
508
+ if (observedInboundTrack) {
509
+ observedInboundTrack.muted = false;
510
+ observedPeerConnection?.emit('unmuted-inbound-track', observedInboundTrack);
511
+ } else if (observedOutboundTrack) {
512
+ observedOutboundTrack.muted = false;
513
+ observedPeerConnection?.emit('unmuted-outbound-track', observedOutboundTrack);
514
+ }
515
+ } else if (postBuffer) {
516
+ postBuffer.push(event);
517
+ } else {
518
+ logger.warn('Received MEDIA_TRACK_UNMUTED event without a corresponding observedPeerConnection or observedTrack: %o', event);
519
+ }
520
+ }
521
+ break;
522
+ }
523
+ case ClientEventTypes.ICE_CONNECTION_STATE_CHANGED: {
524
+ const payload = parseJsonAs<Record<string, unknown>>(event.payload);
525
+
526
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.iceConnectionState && typeof payload.iceConnectionState === 'string') {
527
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
528
+
529
+ if (observedPeerConnection) {
530
+ observedPeerConnection.iceConnectionState = payload.iceConnectionState;
531
+ observedPeerConnection.emit('iceconnectionstatechange', {
532
+ state: payload.iceConnectionState,
533
+ });
534
+ } else if (postBuffer) {
535
+ postBuffer.push(event);
536
+ } else {
537
+ logger.warn('Received ICE_CONNECTION_STATE_CHANGED event without a corresponding observedPeerConnection: %o', event);
538
+ }
539
+ }
540
+ break;
541
+ }
542
+ case ClientEventTypes.ICE_GATHERING_STATE_CHANGED: {
543
+ const payload = parseJsonAs<Record<string, unknown>>(event.payload);
544
+
545
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.iceGatheringState && typeof payload.iceGatheringState === 'string') {
546
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
547
+
548
+ if (observedPeerConnection) {
549
+ observedPeerConnection.iceGatheringState = payload.iceGatheringState;
550
+ observedPeerConnection.emit('icegatheringstatechange', {
551
+ state: payload.iceGatheringState,
552
+ });
553
+ } else if (postBuffer) {
554
+ postBuffer.push(event);
555
+ } else {
556
+ logger.warn('Received ICE_GATHERING_STATE_CHANGED event without a corresponding observedPeerConnection: %o', event);
557
+ }
558
+ }
559
+ break;
560
+ }
561
+ case ClientEventTypes.PEER_CONNECTION_STATE_CHANGED: {
562
+ const payload = parseJsonAs<Record<string, unknown>>(event.payload);
563
+
564
+ if (payload?.peerConnectionId && typeof payload.peerConnectionId === 'string' && payload?.peerConnectionState && typeof payload.peerConnectionState === 'string') {
565
+ const observedPeerConnection = this.observedPeerConnections.get(payload.peerConnectionId);
566
+
567
+ if (observedPeerConnection) {
568
+ observedPeerConnection.connectionState = payload.peerConnectionState;
569
+ observedPeerConnection.emit('connectionstatechange', {
570
+ state: payload.peerConnectionState,
571
+ });
572
+ } else if (postBuffer) {
573
+ postBuffer.push(event);
574
+ } else {
575
+ logger.warn('Received PEER_CONNECTION_STATE_CHANGED event without a corresponding observedPeerConnection: %o', event);
470
576
  }
471
577
  }
472
578
  break;
473
579
  }
474
580
  }
581
+
475
582
  this.emit('clientEvent', event);
476
583
  }
477
584
 
@@ -18,6 +18,8 @@ export class ObservedInboundTrack implements InboundTrackSample {
18
18
 
19
19
  public addedAt?: number | undefined;
20
20
  public removedAt?: number | undefined;
21
+
22
+ public muted?: boolean;
21
23
 
22
24
  attachments?: Record<string, unknown> | undefined;
23
25
 
@@ -18,6 +18,8 @@ export class ObservedOutboundTrack implements OutboundTrackSample {
18
18
  public addedAt?: number | undefined;
19
19
  public removedAt?: number | undefined;
20
20
 
21
+ public muted?: boolean;
22
+
21
23
  attachments?: Record<string, unknown> | undefined;
22
24
 
23
25
  constructor(
@@ -72,6 +72,26 @@ export type ObservedPeerConnectionEvents = {
72
72
  'removed-peer-connection-transport': [ObservedPeerConnectionTransport];
73
73
  'removed-remote-inbound-rtp': [ObservedRemoteInboundRtp];
74
74
  'removed-remote-outbound-rtp': [ObservedRemoteOutboundRtp];
75
+ 'updated-inbound-rtp': [ObservedInboundRtp];
76
+ 'updated-outbound-rtp': [ObservedOutboundRtp];
77
+ 'updated-inbound-track': [ObservedInboundTrack];
78
+ 'updated-outbound-track': [ObservedOutboundTrack];
79
+ 'updated-ice-candidate-pair': [ObservedIceCandidatePair];
80
+ 'updated-ice-transport': [ObservedIceTransport];
81
+ 'updated-peer-connection-transport': [ObservedPeerConnectionTransport];
82
+ 'updated-media-source': [ObservedMediaSource];
83
+ 'updated-media-playout': [ObservedMediaPlayout];
84
+ 'updated-data-channel': [ObservedDataChannel];
85
+ 'updated-ice-candidate': [ObservedIceCandidate];
86
+ 'updated-certificate': [ObservedCertificate];
87
+ 'updated-codec': [ObservedCodec];
88
+ 'updated-remote-inbound-rtp': [ObservedRemoteInboundRtp];
89
+ 'updated-remote-outbound-rtp': [ObservedRemoteOutboundRtp];
90
+ 'muted-inbound-track': [ObservedInboundTrack];
91
+ 'muted-outbound-track': [ObservedOutboundTrack];
92
+ 'unmuted-inbound-track': [ObservedInboundTrack];
93
+ 'unmuted-outbound-track': [ObservedOutboundTrack];
94
+
75
95
  'update': [],
76
96
  close: [];
77
97
  };
@@ -108,6 +128,10 @@ export class ObservedPeerConnection extends EventEmitter {
108
128
  public closedAt?: number;
109
129
  public updated = Date.now();
110
130
 
131
+ public connectionState?: string;
132
+ public iceConnectionState?: string;
133
+ public iceGatheringState?: string;
134
+
111
135
  public availableIncomingBitrate = 0;
112
136
  public availableOutgoingBitrate = 0;
113
137
  public totalInboundPacketsLost = 0;
@@ -650,6 +674,7 @@ export class ObservedPeerConnection extends EventEmitter {
650
674
  this.emit('added-certificate', observedCertificate);
651
675
  } else {
652
676
  observedCertificate.update(stats);
677
+ this.emit('updated-certificate', observedCertificate);
653
678
  }
654
679
 
655
680
  return observedCertificate;
@@ -675,6 +700,7 @@ export class ObservedPeerConnection extends EventEmitter {
675
700
  } else {
676
701
  observedCodec.update(stats);
677
702
  }
703
+ this.emit('updated-codec', observedCodec);
678
704
 
679
705
  return observedCodec;
680
706
  }
@@ -699,6 +725,7 @@ export class ObservedPeerConnection extends EventEmitter {
699
725
  } else {
700
726
  observedDataChannel.update(stats);
701
727
  }
728
+ this.emit('updated-data-channel', observedDataChannel);
702
729
 
703
730
  return observedDataChannel;
704
731
  }
@@ -723,6 +750,7 @@ export class ObservedPeerConnection extends EventEmitter {
723
750
  } else {
724
751
  observedIceCandidate.update(stats);
725
752
  }
753
+ this.emit('updated-ice-candidate', observedIceCandidate);
726
754
 
727
755
  return observedIceCandidate;
728
756
  }
@@ -747,6 +775,7 @@ export class ObservedPeerConnection extends EventEmitter {
747
775
  } else {
748
776
  observedIceCandidatePair.update(stats);
749
777
  }
778
+ this.emit('updated-ice-candidate-pair', observedIceCandidatePair);
750
779
 
751
780
  return observedIceCandidatePair;
752
781
  }
@@ -771,6 +800,7 @@ export class ObservedPeerConnection extends EventEmitter {
771
800
  } else {
772
801
  observedIceTransport.update(stats);
773
802
  }
803
+ this.emit('updated-ice-transport', observedIceTransport);
774
804
 
775
805
  return observedIceTransport;
776
806
  }
@@ -802,6 +832,7 @@ export class ObservedPeerConnection extends EventEmitter {
802
832
  } else {
803
833
  observedInboundRtp.update(stats);
804
834
  }
835
+ this.emit('updated-inbound-rtp', observedInboundRtp);
805
836
 
806
837
  return observedInboundRtp;
807
838
  }
@@ -837,6 +868,7 @@ export class ObservedPeerConnection extends EventEmitter {
837
868
  } else {
838
869
  observedInboundTrack.update(stats);
839
870
  }
871
+ this.emit('updated-inbound-track', observedInboundTrack);
840
872
 
841
873
  return observedInboundTrack;
842
874
  }
@@ -866,6 +898,7 @@ export class ObservedPeerConnection extends EventEmitter {
866
898
  } else {
867
899
  observedMediaPlayout.update(stats);
868
900
  }
901
+ this.emit('updated-media-playout', observedMediaPlayout);
869
902
 
870
903
  return observedMediaPlayout;
871
904
  }
@@ -895,6 +928,7 @@ export class ObservedPeerConnection extends EventEmitter {
895
928
  } else {
896
929
  observedMediaSource.update(stats);
897
930
  }
931
+ this.emit('updated-media-source', observedMediaSource);
898
932
 
899
933
  return observedMediaSource;
900
934
  }
@@ -925,6 +959,7 @@ export class ObservedPeerConnection extends EventEmitter {
925
959
  } else {
926
960
  observedOutboundRtp.update(stats);
927
961
  }
962
+ this.emit('updated-outbound-rtp', observedOutboundRtp);
928
963
 
929
964
  return observedOutboundRtp;
930
965
  }
@@ -959,6 +994,7 @@ export class ObservedPeerConnection extends EventEmitter {
959
994
  } else {
960
995
  observedOutboundTrack.update(stats);
961
996
  }
997
+ this.emit('updated-outbound-track', observedOutboundTrack);
962
998
 
963
999
  return observedOutboundTrack;
964
1000
  }
@@ -983,6 +1019,7 @@ export class ObservedPeerConnection extends EventEmitter {
983
1019
  } else {
984
1020
  observedPeerConnectionTransport.update(stats);
985
1021
  }
1022
+ this.emit('updated-peer-connection-transport', observedPeerConnectionTransport);
986
1023
 
987
1024
  return observedPeerConnectionTransport;
988
1025
  }
@@ -1013,6 +1050,7 @@ export class ObservedPeerConnection extends EventEmitter {
1013
1050
  } else {
1014
1051
  observedRemoteInboundRtp.update(stats);
1015
1052
  }
1053
+ this.emit('updated-remote-inbound-rtp', observedRemoteInboundRtp);
1016
1054
 
1017
1055
  return observedRemoteInboundRtp;
1018
1056
  }
@@ -1043,6 +1081,7 @@ export class ObservedPeerConnection extends EventEmitter {
1043
1081
  } else {
1044
1082
  observedRemoteOutboundRtp.update(stats);
1045
1083
  }
1084
+ this.emit('updated-remote-outbound-rtp', observedRemoteOutboundRtp);
1046
1085
 
1047
1086
  return observedRemoteOutboundRtp;
1048
1087
  }